home *** CD-ROM | disk | FTP | other *** search
/ Internet Info 1994 March / Internet Info CD-ROM (Walnut Creek) (March 1994).iso / networking / osi / quipu / quipu-6.8-bugs.complete < prev    next >
Encoding:
Text File  |  1991-07-21  |  65.3 KB  |  2,733 lines

  1. -------------------- Bug No 1 --------------------------
  2. Return-Path: <c.robbins@uk.co.xtel>
  3. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  4.           id <02521-0@lancaster.xtel.co.uk>; Tue, 12 Mar 1991 13:23:36 +0000
  5. To: quipu-bugs@xtel.co.uk
  6. Subject: Watchdogs
  7. Date: Tue, 12 Mar 91 13:24:08 +0000
  8. From: Colin Robbins <c.robbins@xtel.co.uk>
  9.  
  10. QUIPU VERSION:    6.8
  11.  
  12. ISODE VERSION:    6.8
  13.  
  14. MACHINE:    Sun 4/330 (X-TEL config)
  15.  
  16. O/S:        SunOS 4.1
  17.  
  18. PROGRAM/CHANNEL: 
  19.         ros.quipu
  20.  
  21. SYNOPSIS:    Watchdog activated 
  22.  
  23. DESCRIPTION:    A DSA from time to time logs "Watchdog activated" in
  24.         dsap.log file, and the restarts itself
  25.  
  26. REPEAT BY:    -
  27.  
  28. SAMPLE FIX:    This may fix it, time will tell...
  29.  
  30. *** ../../isode-master/tsap/tp0ts.c    Sun May 12 17:36:52 1991
  31. --- ./tp0ts.c    Wed May 22 14:08:55 1991
  32. ***************
  33. *** 527,532 ****
  34. --- 524,541 ----
  35.       tx -> tx_qbuf.qb_forw = tx -> tx_qbuf.qb_back = &tx -> tx_qbuf;
  36.   
  37.       for (;;) {
  38. +     if (oob) { /* out of band data should not be present! */
  39. +         (void) tsaplose (td, t ? t -> t_errno : DR_CONGEST, NULLCP,
  40. +                      "Out of band data received");
  41. + #ifdef  X25
  42. +             if (tb -> tb_flags & TB_X25)
  43. +                 LLOG (x25_log, LLOG_NOTICE,
  44. +                       ("out of band data on %d, %d/%d octets sent/recv",
  45. +                        tb -> tb_fd, tb -> tb_sent, tb -> tb_recv));
  46. + #endif
  47. +             break;
  48. +     }
  49.       if ((t = fd2tpkt (tb -> tb_fd, tb -> tb_initfnx, tb -> tb_readfnx))
  50.               == NULL
  51.           || t -> t_errno != OK) {
  52.  
  53. *** ssap/ssapinitiate.c~    Wed Jun  5 13:54:11 1991
  54. --- ssap/ssapinitiate.c    Wed Jun  5 16:01:31 1991
  55. ***************
  56. *** 162,171 ****
  57. --- 162,184 ----
  58.   
  59.       if ((sb = newsblk ()) == NULL)
  60.       return ssaplose (si, SC_CONGEST, NULLCP, "out of memory");
  61. + #ifdef notanymore     /* Possible cause of QUIPU watchdogs */
  62.       if (!async || qos == NULLQOS || qos -> qos_maxtime <= 0)
  63.       sb -> sb_maxtime = NOTOK;
  64.       else
  65.       sb -> sb_maxtime = qos -> qos_maxtime;
  66. + #else
  67. +     if (!async || qos == NULLQOS)
  68. +     sb -> sb_maxtime = NOTOK;
  69. +     else
  70. +     if ((sb -> sb_maxtime = qos -> qos_maxtime) == 0)
  71. +         sb -> sb_maxtime = 1;    /* Very nearly zero */
  72. + #endif
  73.   
  74.       if ((s = newspkt (SPDU_CN)) == NULL) {
  75.       (void) ssaplose (si, SC_CONGEST, NULLCP, "out of memory");
  76. ORIGINAL REPORT:
  77.         from the development team
  78. -------------------- Bug No 2 --------------------------
  79. Return-Path: <c.robbins@uk.co.xtel>
  80. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  81.           id <02732-0@lancaster.xtel.co.uk>; Tue, 12 Mar 1991 13:28:19 +0000
  82. To: quipu-bugs@xtel.co.uk
  83. Subject: Dish memory leak
  84. Date: Tue, 12 Mar 91 13:28:49 +0000
  85. From: Colin Robbins <c.robbins@xtel.co.uk>
  86.  
  87. QUIPU VERSION:    6.8
  88.  
  89. ISODE VERSION:    6.8
  90.  
  91. MACHINE:    Sun 4/330 (X-TEL config)
  92.  
  93. O/S:        SunOS 4.1
  94.  
  95. PROGRAM/CHANNEL:
  96.         dish
  97.  
  98. SYNOPSIS:    dish slowly gets bigger and bigger
  99.         during a session. (partial fix only)
  100.  
  101. DESCRIPTION:
  102.  
  103. REPEAT BY:    running dish!
  104.  
  105. SAMPLE FIX:    
  106.  
  107. *** quipu/dish/_dishlib.c    Tue Mar 19 14:56:22 1991
  108. --- quipu/dish/dishlib.c    Tue Mar 19 14:55:58 1991
  109. ***************
  110. *** 64,70 ****
  111.   char    frompipe;
  112.   PS    opt, rps;
  113.   
  114. ! DN              savename;
  115.   
  116.   SFD             dish_quit ();
  117.   SFD             dish_intr ();
  118. --- 64,70 ----
  119.   char    frompipe;
  120.   PS    opt, rps;
  121.   
  122. ! DN              savename = NULLDN;
  123.   
  124.   SFD             dish_quit ();
  125.   SFD             dish_intr ();
  126. ***************
  127. *** 447,452 ****
  128. --- 447,454 ----
  129.               (void) signal (SIGALRM, SIG_IGN); /* unset alarm */
  130.               command = TidyString(inbuf);
  131.           }
  132. +         if (savename)
  133. +             dn_free (savename);
  134.           savename = dn_cpy (dn);
  135.           hide_picture();
  136.           dish_state = BUSY;
  137.  
  138. ORIGINAL REPORT:
  139.  
  140. ------- Forwarded Messages
  141.  
  142. Subject: More on PE memory leaks in 6.7m
  143. Reported-On: Mon, 04 Mar 91 20:19:06 +0000
  144. Reported-By: valdis@vttcf.cc.vt.edu (Valdis Kletnieks)
  145. Reported-To: bug-isode@nisc.psi.net
  146.  
  147. After doing more research, it appears the problem is as follows:
  148.  
  149. PE's are allocated by psap/qbuf2pe_f.c at line 129.
  150.  
  151. However, the various routines in pepsy/fre.c only actually issue
  152. a pe_free() for (essentially) the case pe->pe_form == PE_PRIM.
  153. For the various constructor cases, after pepsy/dec.c (in pr_seq()
  154. and friends) has walked over the PE and created a tpe, the PE is
  155. essentially dropped on the floor and ignored.
  156.  
  157. For the various constructors, I beleive that either fre.c should
  158. be freeing the PE (which also imples that dec.c saves the pointer
  159. in the tpe->pe_ucode field (or similar hack)), or that dec.c should
  160. issue a pe_free() once it has build the corresponding tpe.
  161.  
  162.                 Valdis Kletnieks
  163.                 Computer Systems Engineer
  164.                 Virginia Tech
  165.  
  166. ------- Message 2
  167.  
  168. Subject: Memory leak in isode-6.7m/quipu/dish/dishlib.c
  169. Reported-On: Tue, 05 Mar 91 01:28:22 +0000
  170. Reported-By: valdis@vttcf.cc.vt.edu (Valdis Kletnieks)
  171. Reported-To: bug-isode@nisc.psi.net
  172.  
  173. quipu/dish/dishlib.c:do_dish(), line 444 contains a call to dn_cpy()
  174. which creates a new copy of the current DN, which is never released.
  175. The resulting pointer is saved in 'savename', and only reset in
  176. dishhelp.c:Usage().
  177.  
  178. In our particular case, this results in a leak of 6 malloc() calls,
  179. of 8, 16, 3, 8, 16, and 14 bytes respectively.
  180.  
  181.                 Valdis Kletnieks
  182.                 Computer Systems Engineer
  183.                 Virginia Tech
  184.  
  185. ------- End of Forwarded Messages
  186.  
  187. -------------------- Bug No 3 --------------------------
  188. Return-Path: <c.robbins@uk.co.xtel>
  189. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  190.           id <02755-0@lancaster.xtel.co.uk>; Tue, 12 Mar 1991 13:30:35 +0000
  191. To: quipu-bugs@xtel.co.uk
  192. Subject: Loosing file descriptors
  193. Date: Tue, 12 Mar 91 13:31:06 +0000
  194. From: Colin Robbins <c.robbins@xtel.co.uk>
  195.  
  196. QUIPU VERSION:    6.8
  197.  
  198. ISODE VERSION:    6.8
  199.  
  200. MACHINE:    Sun 4/330 (X-TEL config)
  201.  
  202. O/S:        SunOS 4.1
  203.  
  204. PROGRAM/CHANNEL:
  205.         ros.quipu
  206.  
  207. SYNOPSIS:    ros.quipu seems to loose track of a file descriptor
  208.         from time to time (no fix yet)
  209.  
  210. DESCRIPTION:    kill -USR1 now gives a list of fd's accoring to the 
  211.         UNIX kernal, and Quipu.  These do not always agree!
  212.  
  213. REPEAT BY:
  214.  
  215. SAMPLE FIX:
  216.  
  217. ORIGINAL REPORT:
  218.          Marshall Rose
  219. -------------------- Bug No 4 --------------------------
  220. Return-Path: <c.robbins@uk.co.xtel>
  221. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  222.           id <03082-0@lancaster.xtel.co.uk>; Tue, 12 Mar 1991 13:34:08 +0000
  223. To: quipu-bugs@xtel.co.uk
  224. Subject: Control c in dish
  225. Date: Tue, 12 Mar 91 13:34:38 +0000
  226. From: Colin Robbins <c.robbins@xtel.co.uk>
  227.  
  228. QUIPU VERSION:    6.8
  229.  
  230. ISODE VERSION:    6.8
  231.  
  232. MACHINE:    Sun 4/330 (X-TEL config)
  233.  
  234. O/S:        SunOS 4.1
  235.  
  236. PROGRAM/CHANNEL:
  237.         dish
  238.  
  239. SYNOPSIS:    when searching, a control-c to dish will sometimes
  240.         cause a core dump (no fix yet)
  241.     
  242.  
  243. DESCRIPTION:    It seems to be OK if dish is in select.  The problem
  244.         would appear to happen when on the "way down" or
  245.         "way up" the stack.
  246.         Tim Howes reported this can core dump the DSA.
  247.  
  248. REPEAT BY:
  249.  
  250. SAMPLE FIX:
  251.  
  252. ORIGINAL REPORT:
  253.          Paul Barker
  254.         Time Howes.
  255. -------------------- Bug No 5 --------------------------
  256. Return-Path: <c.robbins@uk.co.xtel>
  257. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  258.           id <14125-0@lancaster.xtel.co.uk>; Thu, 14 Mar 1991 14:56:34 +0000
  259. To: quipu-bugs@xtel.co.uk
  260. Subject: Modify inherited attributes
  261. Date: Thu, 14 Mar 91 14:57:14 +0000
  262. From: Colin Robbins <c.robbins@xtel.co.uk>
  263.  
  264. QUIPU VERSION:    6.8
  265.  
  266. ISODE VERSION:    6.8
  267.  
  268. MACHINE:    Sun 4/330 (X-TEL config)
  269.  
  270. O/S:        SunOS 4.1
  271.  
  272. PROGRAM/CHANNEL:
  273.         ros.quipu
  274.  
  275. SYNOPSIS:
  276.         Can not modify an attribute value if it is inherited
  277.         into your entry.
  278.  
  279. DESCRIPTION:
  280.         If an attribute is inherited into an entry, then
  281.         attempts to modify the entry via DAP fail with an 
  282.         access rights error message (even if bound as the DSA
  283.         manager). 
  284.  
  285. SAMPLE FIX:
  286.                No patch as yet.
  287.         You can worked round it by first adding the new value
  288.         for the attribute, then in a second operation removing 
  289.         the inherited value (if it is default inherited).
  290.  
  291. ORIGINAL REPORT:
  292.          From the WPP pilot.
  293.  
  294. -------------------- Bug No 6 --------------------------
  295. Return-Path: <c.robbins@uk.co.xtel>
  296. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  297.           id <21255-0@lancaster.xtel.co.uk>; Fri, 15 Mar 1991 09:12:55 +0000
  298. To: quipu-bugs@xtel.co.uk
  299. Subject: dsastats
  300. Date: Fri, 15 Mar 91 09:13:40 +0000
  301. From: Colin Robbins <c.robbins@xtel.co.uk>
  302.  
  303.  
  304. QUIPU VERSION:    6.8
  305.  
  306. ISODE VERSION:    6.8
  307.  
  308. MACHINE:    Sun 4/330 (X-TEL config)
  309.  
  310. O/S:        SunOS 4.1
  311.  
  312. PROGRAM:    dsastats
  313.  
  314. SYNOPSIS:    date showed up incorrectly from time to time
  315.  
  316. DESCRIPTION:
  317.  
  318. REPEAT BY:
  319.  
  320. SAMPLE FIX:    patch below
  321.  
  322. ORIGINAL REPORT:
  323.  
  324. ------- Forwarded Message
  325.  
  326. Subject: A few small awk tweaks...
  327. Reported-On: Wed, 13 Mar 91 21:39:13 +0000
  328. Reported-By: root@vttcf.cc.vt.edu (The Super-user)
  329. Reported-To: bug-isode@nisc.psi.net
  330.  
  331. (1) Added a count for '(protected)' binds
  332. (2) Fixed a problem where the day showed as '2147483647 mar'
  333.  
  334.                 Valdis Kletnieks
  335.                 Computer Systems Engineer
  336.                 Virginia Tech
  337.  
  338. - -- start patch file against isode-interim sources --
  339. *** others/quipu/tools/dsastats/dsastats.dist.real    Wed Mar 13 16:06:38 199
  340. 1
  341. - --- others/quipu/tools/dsastats/dsastats.dist    Wed Mar 13 16:35:12 1991
  342. ***************
  343. *** 44,50 ****
  344.   }
  345.       {    
  346.           monthno = substr($0, 1, 2) + 0
  347. !         dayno = substr($0, 4, 2)
  348.           time = substr($0, 7, 8)
  349.           printf("%s on %02d %s", time, dayno, montharray[monthno])
  350.       } '
  351. - --- 44,50 ----
  352.   }
  353.       {    
  354.           monthno = substr($0, 1, 2) + 0
  355. !         dayno = substr($0, 4, 2) + 0
  356.           time = substr($0, 7, 8)
  357.           printf("%s on %02d %s", time, dayno, montharray[monthno])
  358.       } '
  359. ***************
  360. *** 349,354 ****
  361. - --- 349,362 ----
  362.           localsimple++
  363.   }
  364.   
  365. + /.* bind.*\(protected\).*/ {
  366. +     if (substr($0, 1, 6) == "remote")
  367. +         remoteprotected++
  368. +     else
  369. +         localprotected++
  370. + }
  371.   / bind.*\(no auth\)| bind.*\(simple\)/ {
  372.       n = index($0, ":")
  373.       username = substr($0, n+2)
  374. ***************
  375. *** 468,473 ****
  376. - --- 476,482 ----
  377.       printf "%-20s%10s%8d%8d\n", "Unauth name DAP", "", localnoauthdap, remo
  378. tenoauthdap
  379.       printf "%-20s%10s%8d%8d\n", "Unauth name DSP", "",localnoauthdsp, remot
  380. enoauthdsp
  381.       printf "%-20s%10s%8d%8d\n", "Simple", "", localsimple, remotesimple
  382. +     printf "%-20s%10s%8d%8d\n", "Protected", "", localprotected, remoteprot
  383. ected
  384.   
  385.   #print "have this list of users"
  386.   #for (user in usernames)
  387. - -- end patch file --
  388.  
  389.  
  390. ------- End of Forwarded Message
  391.  
  392. -------------------- Bug No 7 --------------------------
  393. Return-Path: <c.robbins@uk.co.xtel>
  394. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  395.           id <21266-0@lancaster.xtel.co.uk>; Fri, 15 Mar 1991 09:14:12 +0000
  396. To: quipu-bugs@xtel.co.uk
  397. Subject: 'help' function in 'pod' broken
  398. Date: Fri, 15 Mar 91 09:14:54 +0000
  399. From: Colin Robbins <c.robbins@xtel.co.uk>
  400.  
  401. QUIPU VERSION:    6.8
  402.  
  403. ISODE VERSION:    6.8
  404.  
  405. MACHINE:    Sun 4/330 (X-TEL config)
  406.  
  407. O/S:        SunOS 4.1
  408.  
  409. PROGRAM:    pod
  410.  
  411. SYNOPSIS:    'help' function in 'pod' broken
  412.  
  413. DESCRIPTION:
  414.  
  415. REPEAT BY:
  416.  
  417. SAMPLE FIX:    patch below
  418.  
  419. ORIGINAL REPORT:
  420.  
  421. ------- Forwarded Message
  422.  
  423. Subject: 'help' function in 'pod' broken
  424. Reported-On: Wed, 13 Mar 91 23:30:05 +0000
  425. Reported-By: valdis@vttcf.cc.vt.edu (Valdis Kletnieks)
  426. Reported-To: bug-isode@nisc.psi.net
  427.  
  428. A bad assignment to a pathname keeps the 'help' function from working.
  429. A patch against the isode-interim sources follows.
  430.  
  431.                 Valdis Kletnieks
  432.                 Computer Systems Engineer
  433.                 Virginia Tech
  434. - -- start patch file --
  435. *** others/quipu/uips/pod/calls.c.dist    Wed Mar 13 18:21:20 1991
  436. - --- others/quipu/uips/pod/calls.c    Wed Mar 13 18:21:23 1991
  437. ***************
  438. *** 139,145 ****
  439.     (void) strcpy(dua_help_dir, dua_config_dir);
  440.   
  441.     (void) strcat(dua_config_dir, "/duaconfig");
  442. !   (void) strcat(dua_help_dir, "/podHelpdir");
  443.   
  444.     (void) strcpy (user_path, getenv("HOME"));
  445.     (void) strcpy(read_path, user_path);
  446. - --- 139,145 ----
  447.     (void) strcpy(dua_help_dir, dua_config_dir);
  448.   
  449.     (void) strcat(dua_config_dir, "/duaconfig");
  450. !   (void) strcat(dua_help_dir, "/podHelpdir/");
  451.   
  452.     (void) strcpy (user_path, getenv("HOME"));
  453.     (void) strcpy(read_path, user_path);
  454. - -- end patch file --
  455.  
  456. ------- End of Forwarded Message
  457.  
  458. -------------------- Bug No 8 --------------------------
  459. Return-Path: <c.robbins@uk.co.xtel>
  460. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  461.           id <21240-0@lancaster.xtel.co.uk>; Fri, 15 Mar 1991 09:10:58 +0000
  462. To: quipu-bugs@xtel.co.uk
  463. Subject: fred format changed
  464. Date: Fri, 15 Mar 91 09:11:42 +0000
  465. From: Colin Robbins <c.robbins@xtel.co.uk>
  466.  
  467. ISODE VERSION:    6.8
  468.  
  469. MACHINE:    Sun 4/330 (X-TEL config)
  470.  
  471. O/S:        SunOS 4.1
  472.  
  473. PROGRAM:    fred
  474.  
  475. SYNOPSIS:    Fred format with -mail flag not quite the 
  476.         same as with 6.0
  477.  
  478. DESCRIPTION:    
  479.  
  480. REPEAT BY:
  481.  
  482. SAMPLE FIX:    patch below
  483.  
  484. ORIGINAL REPORT:
  485.          carlson@lll-winken.llnl.gov
  486.  
  487.  
  488.  
  489. ------- Forwarded Message
  490.  
  491. Subject: Re: 6.8 upgrade question
  492. Reported-On: Tue, 12 Mar 91 14:07:10 -0800
  493. Reported-By: Marshall Rose <mrose@cheetah.ca.psi.com>
  494. Reported-To: carlson@lll-winken.llnl.gov
  495.  
  496. Try this patch and let me know what you think.
  497.  
  498. /mtr
  499. *** quipu/dish/_fred.c    Sat Mar  9 11:56:30 1991
  500. - --- quipu/dish/fred.c    Tue Mar 12 14:03:49 1991
  501. ***************
  502. *** 88,93 ****
  503. - --- 88,96 ----
  504.   extern    LLog   *dad_log;
  505.   #endif
  506.   
  507. + extern    Attr_Sequence
  508. +             ufnas;
  509.   char        fred_flag;
  510.   char        fred_expand;
  511.   char        fred_list;
  512. ***************
  513. *** 136,146 ****
  514. - --- 139,161 ----
  515.   int    argc;
  516.   char  **argv;
  517.   {
  518. +     static int did_ufnas = 0;
  519.       if (argc < 2)
  520.       goto usage;
  521.   
  522.       fred_init ();
  523. +     if (!did_ufnas) {
  524. +     if (ufn_init () == FALSE) {
  525. +         ps_printf (OPT, "UFN initialization fails.\n");
  526. +         return;
  527. +     }
  528.   
  529. +     ufnas = as_merge (ufnas, as_cpy (fred_as ()));
  530. +     did_ufnas = 1;
  531. +     }
  532.       if (test_arg (argv[1], "-display", 7)) {
  533.       if (argc != 3)
  534.           goto usage;
  535. ***************
  536. *** 858,865 ****
  537.   extern    char    search_result;
  538.   #endif
  539.   extern    char    remote_prob;
  540. - - extern    Attr_Sequence
  541. - -             ufnas;
  542.   
  543.   /*   */
  544.   
  545. - --- 873,878 ----
  546. ***************
  547. *** 869,879 ****
  548.   {
  549.       struct dn_seq  *dns;
  550.   
  551. - -     if (ufn_init () == FALSE) {
  552. - -     ps_printf (OPT, "UFN initialization fails.\n");
  553. - -     return;
  554. - -     }
  555. - - 
  556.       if (rebind () != OK)
  557.       return;
  558.   
  559. - --- 882,887 ----
  560. ***************
  561. *** 885,902 ****
  562.       else
  563.       fred_list = FALSE;
  564.       if (n > 0 && strcmp (vec[0], "-mailbox") == 0) {
  565. - -     static int did_ufnas = 0;
  566. - - 
  567.       n--, vec++;
  568.       fred_mailbox = TRUE;
  569. !     if (!did_ufnas) {
  570. !         did_ufnas = 1;
  571. !         if (t_mbox == NULL)
  572. !         fatal (-100, "rfc822Mailbox: invalid attribute type");
  573. !         
  574. !         ufnas = as_merge (ufnas, as_cpy (fred_as ()));
  575. !     }
  576.       }
  577.       else
  578.       fred_mailbox = FALSE;
  579. - --- 893,902 ----
  580.       else
  581.       fred_list = FALSE;
  582.       if (n > 0 && strcmp (vec[0], "-mailbox") == 0) {
  583.       n--, vec++;
  584.       fred_mailbox = TRUE;
  585. !     if (t_mbox == NULL)
  586. !         fatal (-100, "rfc822Mailbox: invalid attribute type");
  587.       }
  588.       else
  589.       fred_mailbox = FALSE;
  590. ***************
  591. *** 1515,1524 ****
  592. - --- 1515,1526 ----
  593.       register DN    adn;
  594.       register RDN    rdn;
  595.   
  596. + /*
  597.       if (islong == FALSE) {
  598.           ufn_dn_print_aux (RPS, mydn, NULLDN, 0);
  599.           goto ufn_short;
  600.       }
  601. +  */
  602.       for (adn = mydn; adn -> dn_parent; adn = adn -> dn_parent)
  603.           continue;
  604.       myrdn = adn -> dn_rdn;
  605.  
  606. ------- End of Forwarded Message
  607.  
  608. -------------------- Bug No 9 --------------------------
  609. Return-Path: <c.robbins@uk.co.xtel>
  610. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  611.           id <01170-0@lancaster.xtel.co.uk>; Fri, 15 Mar 1991 16:40:10 +0000
  612. To: quipu-bugs@xtel.co.uk
  613. Subject: optimize_attr doc error
  614. Date: Fri, 15 Mar 91 16:40:03 +0000
  615. From: Colin Robbins <c.robbins@xtel.co.uk>
  616.  
  617. QUIPU VERSION:    6.8
  618.  
  619. ISODE VERSION:    6.8
  620.  
  621. MACHINE:    Sun 4/330 (X-TEL config)
  622.  
  623. O/S:        SunOS 4.1
  624.  
  625. PROGRAM:
  626.  
  627. SYNOPSIS:    documentation says index_attribute instead of optimize_attr
  628.  
  629. DESCRIPTION:
  630.  
  631. REPEAT BY:
  632.  
  633. SAMPLE FIX:    use optimize_attr
  634.  
  635. ORIGINAL REPORT:
  636.  
  637. ------- Forwarded Message
  638.  
  639. Subject: Documentation error in ISODE 6.8
  640. Reported-On: 15 Mar 91 11:17:00 -0500
  641. Reported-By: Peter (P.W.) Whittaker <PWW@BNR.ca>
  642. Reported-To: quipu-support@cs.ucl.ac.uk
  643.  
  644. Page 140 of V5 (QUIPU) says that optimize_attr is the quiputailor variable
  645. used to indicated which attributes are indexed, while Colin's upgrading
  646. document says that it is index_attribute.  Which (if any) is it?
  647.  
  648.  
  649. ------- End of Forwarded Message
  650.  
  651. -------------------- Bug No 10 --------------------------
  652. Return-Path: <c.robbins@uk.co.xtel>
  653. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  654.           id <07395-0@lancaster.xtel.co.uk>; Mon, 18 Mar 1991 08:13:45 +0000
  655. To: quipu-bugs@xtel.co.uk
  656. Subject: Inheritance scheam error
  657. Date: Mon, 18 Mar 91 08:13:54 +0000
  658. From: Colin Robbins <c.robbins@xtel.co.uk>
  659.  
  660. QUIPU VERSION:    6.8
  661.  
  662. ISODE VERSION:    6.8
  663.  
  664. MACHINE:    Sun 4/330 (X-TEL config)
  665.  
  666. O/S:        SunOS 4.1
  667.  
  668. PROGRAM:    ros.quipu
  669.  
  670. SYNOPSIS:    With inherited attributes you can introduce a schema
  671.         error that is not notice until the next DSA re-boot
  672.         (no fix yet)
  673.  
  674. DESCRIPTION:
  675.  
  676. REPEAT BY:
  677.  
  678. SAMPLE FIX:    
  679.  
  680. ORIGINAL REPORT:
  681.  
  682. ------- Forwarded Message
  683.  
  684. Subject: Inheritance (caution)
  685. Reported-On: Sun, 17 Mar 91 15:17:49 +0000
  686. Reported-By: "Andrew Macpherson (Postmaster)" <andrew@uk.co.stc.stl.palm13>
  687. Reported-To: quipu-support@cs.ucl.ac.uk
  688.  
  689.  
  690. Nice.  There are no checks though that the aggregate inheriting
  691. the properties has the ability to inherit those properties.  Eg
  692. `person' inheriting telephoneNumber --- you can add this to a running
  693. DSA, and not notice the schema error until re-boot time.
  694.  
  695. [[This may be in the documentation, I havn't run latex yet.]]
  696.  
  697. ------- End of Forwarded Message
  698.  
  699. -------------------- Bug No 11 --------------------------
  700. Return-Path: <c.robbins@uk.co.xtel>
  701. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  702.           id <09365-0@lancaster.xtel.co.uk>; Mon, 18 Mar 1991 09:55:11 +0000
  703. To: quipu-bugs@xtel.co.uk
  704. Subject: unknown di-type
  705. Date: Mon, 18 Mar 91 09:55:22 +0000
  706. From: Colin Robbins <c.robbins@xtel.co.uk>
  707.  
  708. QUIPU VERSION:    6.8
  709.  
  710. ISODE VERSION:    6.8
  711.  
  712. MACHINE:    Sun 4/330 (X-TEL config)
  713.  
  714. O/S:        SunOS 4.1
  715.  
  716. PROGRAM:    ros.quipu
  717.  
  718. SYNOPSIS:    see 
  719.         get_dsa_info_aux - unknown di-type nnn
  720.         followed by a DSA crash in the log files.
  721.  
  722. DESCRIPTION:    
  723.  
  724. REPEAT BY:
  725.  
  726. SAMPLE FIX:
  727.  
  728. *** quipu/_di_block.c    Mon Mar 18 15:30:32 1991
  729. --- quipu/di_block.c    Mon Mar 18 15:31:46 1991
  730. ***************
  731. *** 140,146 ****
  732.       {
  733.       di_tmp1_next = di_tmp1->di_next;
  734.   
  735. !     switch(di->di_state)
  736.       {
  737.       case DI_ACCESSPOINT:
  738.       case DI_COMPLETE:
  739. --- 140,146 ----
  740.       {
  741.       di_tmp1_next = di_tmp1->di_next;
  742.   
  743. !     switch(di_tmp1->di_state)
  744.       {
  745.       case DI_ACCESSPOINT:
  746.       case DI_COMPLETE:
  747.  
  748.  
  749. ORIGINAL REPORT:
  750.  
  751. ------- Forwarded Message
  752.  
  753. Subject: quipu-6.8
  754. Reported-On: Sun, 17 Mar 91 18:45:27 +0000
  755. Reported-By: philip@bigben.dle.dg.com (Philip Gladstone)
  756. Reported-To: quipu-support@cs.ucl.ac.uk
  757.  
  758. Hello all,
  759.  
  760.         I have managed to get quipu-6.8 running (c=gb@cn=Northern
  761. Pudu). However, I don't know how to change the copy of the dsa entry
  762. that resides in the c=GB EDB. Help please!
  763.  
  764.         I'm also experiencing some crashes which seem to be associated
  765. with remote dsa information. [The following is a repeatable error that
  766. arises if i do a 'list @c=de']. Could this be related to the fact that
  767. the entry for my DSA is out of date?
  768.  
  769. get_dsa_info_aux - unknown di-type 117
  770. Listening on ads:  6, 5.
  771. get_dsa_info_aux - unknown di-type 117
  772. Listening on ads:  6, 5.
  773. Should wake global
  774. dsa_info_error_wakeup - invalid di_type
  775. DSA c=gb@CN=Northern Pudu has a problem  <-- crash in dsa_info_error_wakeup
  776.  
  777.  
  778.  
  779. Weekend Hacker of Cambridge
  780.  
  781. ------- End of Forwarded Message
  782.  
  783. -------------------- Bug No 12 --------------------------
  784. Return-Path: <c.robbins@uk.co.xtel>
  785. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  786.           id <09393-0@lancaster.xtel.co.uk>; Mon, 18 Mar 1991 10:00:11 +0000
  787. To: quipu-bugs@xtel.co.uk
  788. Subject: dish dies on invalid ASN.1
  789. Date: Mon, 18 Mar 91 10:00:21 +0000
  790. From: Colin Robbins <c.robbins@xtel.co.uk>
  791.  
  792. QUIPU VERSION:    6.8
  793.  
  794. ISODE VERSION:    6.8
  795.  
  796. MACHINE:    Sun 4/330 (X-TEL config)
  797.  
  798. O/S:        SunOS 4.1
  799.  
  800. PROGRAM:    dish (and general ISODE)
  801.  
  802. SYNOPSIS:    If given invalid ASN.1 a program can die due to a
  803.         pepsy related bug (no fix yet)
  804.  
  805. DESCRIPTION:    It is feared the fix below is only one such situation,
  806.         there may be others. Time will tell.
  807.  
  808. REPEAT BY:
  809.  
  810. SAMPLE FIX:    Supplied by Andrew Worsley...
  811.  
  812. *** pepsy/dec.c_orig    Sat Feb 23 05:03:45 1991
  813. --- pepsy/dec.c        Wed Mar 20 17:02:46 1991
  814. ***************
  815. *** 1559,1564 ****
  816. --- 1559,1566 ----
  817.       for (cnt = 1; p->pe_type != PE_END; NEXT_TPE(p)) {
  818.       if (ISDTYPE(p)) {
  819.           if (ismatch(p, mod, head->pe_class, head->pe_id)) {
  820. +         if (!savep && poffset)
  821. +             *poffset = cnt;
  822.           if (pr_etype(head, parm, p, mod) == NOTOK)
  823.               goto bad;
  824.           if (savep) {
  825. ***************
  826. *** 1567,1574 ****
  827.                (*mod -> md_ducode)(parm, head, savep, cnt) == NOTOK))
  828.               goto bad;
  829.           }
  830. -         else
  831. -             *poffset = cnt;
  832.           NEXT_TPE(p);
  833.           if (p->pe_type == UCODE) {
  834.               if (mod->md_ducode == NULLIFP
  835. --- 1569,1574 ----
  836.  
  837. ORIGINAL REPORT:
  838.          CJR to quipu-support when testing Pizarro
  839. -------------------- Bug No 13 --------------------------
  840. Return-Path: <c.robbins@uk.co.xtel>
  841. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  842.           id <17564-0@lancaster.xtel.co.uk>; Mon, 18 Mar 1991 17:08:09 +0000
  843. To: quipu-bugs@xtel.co.uk
  844. Subject: misc fix
  845. Date: Mon, 18 Mar 91 17:08:20 +0000
  846. From: Colin Robbins <c.robbins@xtel.co.uk>
  847.  
  848. QUIPU VERSION:    6.8
  849.  
  850. ISODE VERSION:    6.8
  851.  
  852. MACHINE:    Sun 4/330 (X-TEL config)
  853.  
  854. O/S:        SunOS 4.1
  855.  
  856. PROGRAM:    ros.quipu
  857.  
  858. SYNOPSIS:    A few unimportant bug fixes put here
  859.         for completeness
  860.  
  861. DESCRIPTION:    
  862.  
  863. REPEAT BY:
  864.  
  865. SAMPLE FIX:
  866.  
  867. *** quipu/_find_entry.c    Mon Mar 18 16:59:37 1991
  868. --- quipu/find_entry.c    Mon Mar 18 17:04:13 1991
  869. ***************
  870. *** 609,615 ****
  871.               (ptr->e_data == E_TYPE_SLAVE) ||
  872.                   ((ptr->e_data == E_TYPE_CACHE_FROM_MASTER) &&
  873.                (timenow - ptr->e_age < cache_timeout))) {
  874. !             if ( (ptr->e_master == NULLAV) && (ptr->e_slave == NULLAV))
  875.                   continue ;
  876.               return(dsa_info_new(object,dn_stack,master,ptr,err,di_p));
  877.           }
  878. --- 609,615 ----
  879.               (ptr->e_data == E_TYPE_SLAVE) ||
  880.                   ((ptr->e_data == E_TYPE_CACHE_FROM_MASTER) &&
  881.                (timenow - ptr->e_age < cache_timeout))) {
  882. !             if ( (!ptr->e_external) && (ptr->e_master == NULLAV) && (ptr->e_slave == NULLAV))
  883.                   continue ;
  884.               return(dsa_info_new(object,dn_stack,master,ptr,err,di_p));
  885.           }
  886.  
  887. *** quipu/_dsa.c    Tue Mar 19 08:49:31 1991
  888. --- quipu/dsa.c    Tue Mar 19 08:50:18 1991
  889. ***************
  890. *** 385,391 ****
  891.       for (sd = 3; sd < nbits; sd++) {
  892.       if (log_dsap -> ll_fd == sd)
  893.           continue;
  894. ! #ifdef    NO_STATS
  895.       if (log_stats -> ll_fd == sd)
  896.           continue;
  897.   #endif
  898. --- 385,391 ----
  899.       for (sd = 3; sd < nbits; sd++) {
  900.       if (log_dsap -> ll_fd == sd)
  901.           continue;
  902. ! #ifndef    NO_STATS
  903.       if (log_stat -> ll_fd == sd)
  904.           continue;
  905.   #endif
  906. ***************
  907. *** 499,505 ****
  908.       for (sd = 3; sd < nbits; sd++) {
  909.           if (log_dsap -> ll_fd == sd)
  910.           continue;
  911. ! #ifdef    NO_STATS
  912.           if (log_stats -> ll_fd == sd)
  913.           continue;
  914.   #endif
  915. --- 499,505 ----
  916.       for (sd = 3; sd < nbits; sd++) {
  917.           if (log_dsap -> ll_fd == sd)
  918.           continue;
  919. ! #ifndef    NO_STATS
  920.           if (log_stats -> ll_fd == sd)
  921.           continue;
  922.   #endif
  923. *** quipu/_ds_search.c    Tue Mar 19 11:59:46 1991
  924. --- quipu/ds_search.c    Tue Mar 19 12:00:34 1991
  925. ***************
  926. *** 1596,1602 ****
  927.   register char * str2;
  928.   register int count;
  929.   char * top, *top2;
  930. ! char found;
  931.   
  932.       top = str1;
  933.       top2 = str2 = (char *)av->av_struct;
  934. --- 1596,1602 ----
  935.   register char * str2;
  936.   register int count;
  937.   char * top, *top2;
  938. ! char found = 0;
  939.   
  940.       top = str1;
  941.       top2 = str2 = (char *)av->av_struct;
  942. *** quipu/_oper_act.c    Tue Mar 19 10:47:56 1991
  943. --- quipu/oper_act.c    Tue Mar 19 11:55:13 1991
  944. ***************
  945. *** 187,192 ****
  946. --- 187,196 ----
  947.   
  948.       on->on_dsas = NULL_DI_BLOCK;
  949.   
  950. +     if (on->on_task &&
  951. +     (on->on_task->tk_result == &(on->on_resp.di_result.dr_res)))
  952. +         on->on_task->tk_result = (struct ds_op_res *) NULL;
  953.       on->on_task = NULLTASK; /* Shows that this has been task_extracted */
  954.   }
  955.   
  956. *** quipu/_task_act.c    Tue Mar 19 10:55:21 1991
  957. --- quipu/task_act.c    Tue Mar 19 10:56:03 1991
  958. ***************
  959. *** 58,63 ****
  960. --- 58,64 ----
  961.       if (tk->tk_resp.di_type == DI_ERROR)
  962.           ds_error_free (tk->tk_error);
  963.       else if (tk->tk_resp.di_type == DI_RESULT)
  964. +       if (tk->tk_result)
  965.       if (tk->tk_conn->cn_ctx == DS_CTX_X500_DAP)
  966.           ds_res_free (&(tk->tk_result->dcr_dsres));
  967.       else
  968.  
  969. ORIGINAL REPORT:
  970.          
  971.         Saber C!
  972. -------------------- Bug No 14 --------------------------
  973. Return-Path: <c.robbins@uk.co.xtel>
  974. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  975.           id <01065-0@lancaster.xtel.co.uk>; Wed, 20 Mar 1991 16:08:21 +0000
  976. To: quipu-bugs@xtel.co.uk
  977. Subject: modify bug
  978. Date: Wed, 20 Mar 91 16:08:39 +0000
  979. From: Colin Robbins <c.robbins@xtel.co.uk>
  980.  
  981. QUIPU VERSION:    6.8
  982.  
  983. ISODE VERSION:    6.8
  984.  
  985. MACHINE:    Sun 4/330 (X-TEL config)
  986.  
  987. O/S:        SunOS 4.1
  988.  
  989. PROGRAM:    ros.quipu
  990.  
  991. SYNOPSIS:    Can core dump if adding a non leaf object
  992.  
  993. DESCRIPTION:    
  994.  
  995. REPEAT BY:
  996.  
  997. SAMPLE FIX:
  998.  
  999. *** quipu/_ds_modify.c    Wed Mar 20 16:07:22 1991
  1000. --- quipu/ds_modify.c    Wed Mar 20 16:07:06 1991
  1001. ***************
  1002. *** 727,732 ****
  1003. --- 727,736 ----
  1004.           free (eptr->e_parent->e_edbversion);
  1005.       eptr->e_parent->e_edbversion = new_version();
  1006.   
  1007. +     if (eptr->e_edbversion)
  1008. +         free (eptr->e_edbversion);
  1009. +     eptr->e_edbversion = new_version();
  1010.       save_dn = get_copy_dn(eptr) ;
  1011.   
  1012.       if ((filename = dn2edbfile(save_dn)) == NULLCP)
  1013.  
  1014. ORIGINAL REPORT:
  1015.  
  1016. ------- Forwarded Message
  1017.  
  1018. Subject: Bug in (dish,quipu,or dsap) ?
  1019. Reported-On: Wed, 20 Mar 91 14:07:46 +0000
  1020. Reported-By: Alan Shepherd <gas@cs.nott.ac.uk>
  1021. Reported-To: c.robbins@xtel.co.uk
  1022.  
  1023.  
  1024. Colin,
  1025.  
  1026. adding an entry to the tree then immedaitely deleting ti causes 
  1027. ros.quipu to die on sig 11.  The entry is deleted, but a bad eDB file
  1028. is left lying around.  See /usr/tmp/dsap.log for detatils.
  1029.  
  1030. alan
  1031.  
  1032. ------- End of Forwarded Message
  1033.  
  1034. -------------------- Bug No 15 --------------------------
  1035. Return-Path: <c.robbins@uk.co.xtel>
  1036. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  1037.           id <02729-0@lancaster.xtel.co.uk>; Tue, 2 Apr 1991 09:55:25 +0100
  1038. To: quipu-bugs@xtel.co.uk
  1039. Subject: AOFFSET
  1040. Date: Tue, 02 Apr 91 09:56:46 +0100
  1041. From: Colin Robbins <c.robbins@xtel.co.uk>
  1042.  
  1043. QUIPU VERSION:    6.8
  1044.  
  1045. ISODE VERSION:    6.8
  1046.  
  1047. MACHINE:    Sun 4/330 (X-TEL config)
  1048.  
  1049. O/S:        SunOS 4.1
  1050.  
  1051. PROGRAM:    libdsap
  1052.  
  1053. SYNOPSIS:    Some compilers complain about compiling AOFFSET in x500as
  1054.  
  1055. DESCRIPTION:
  1056.  
  1057. REPEAT BY:
  1058.  
  1059. SAMPLE FIX:
  1060.  
  1061. ORIGINAL REPORT:
  1062.  
  1063. ------- Forwarded Messages
  1064.  
  1065. Subject: Re: Another 6.8 incompatability
  1066. Reported-On: Tue, 26 Mar 91 08:40:59 -0800
  1067. Reported-By: Marshall Rose <mrose@cheetah.ca.psi.com>
  1068. Reported-To: kincl@iag.hp.com (Norman Kincl)
  1069.  
  1070. To my reading, both definitions of AOFFSET are legal.  The last time I check
  1071. K&R, saying
  1072.  
  1073.     &a[0]
  1074.  
  1075. was always equivalent to saying
  1076.  
  1077.     a
  1078.  
  1079. The problem is that not all C compilers know this.  Some fail on case #1 and
  1080. others fail on case #2.  I have solved the problem temporarily by putting
  1081. case #1 under an #ifdef hpux and case #2 otherwise...
  1082.  
  1083. /mtr
  1084.  
  1085. ------- Message 2
  1086.  
  1087. Subject: Another 6.8 incompatability
  1088. Reported-On: Mon, 25 Mar 91 17:10:40 -0800
  1089. Reported-By: Norman Kincl <kincl@iag.hp.com>
  1090. Reported-To: wpp-camayocs@nisc.psi.net
  1091.  
  1092.  
  1093. While trying to make dsap/x500as, I ran into some compiler errors complaining
  1094. about "incorrect initialization".  I traced this to the AOFFSET macro.  It is
  1095. defined to be
  1096.     #define AOFFSET(t,f)    ((int ) (((t *)0)->f))
  1097. As best as we could figure out, the difference between AOFFSET and OFFSET is
  1098. that AOFFSET gives you the offset to an element which is an array.  We changed
  1099. the definition to the following:
  1100.     #define AOFFSET(t,f)    ((int ) &(((t *)0)->f[0]))
  1101.  
  1102. Question: is one or the other more or less standard C?  (Do we have a compiler
  1103. bug or does Quipu have a non-standard usgae of the language?
  1104.  
  1105. Note:  The right place to change things is in pepsy/pass2.c, changing the line
  1106. that reads:
  1107.     (void) fprintf(fptab, "\n#define AOFFSET(t,f)\t((int ) (((t *)0)->f))\n\n")
  1108. ;
  1109. to:
  1110.     (void) fprintf(fptab, "\n#define AOFFSET(t,f)\t((int ) &(((t *)0)->f[0]))\n
  1111. \n");
  1112.  
  1113. - -Norm Kincl
  1114.  
  1115. ------- End of Forwarded Messages
  1116.  
  1117. -------------------- Bug No 16 --------------------------
  1118. Return-Path: <c.robbins@uk.co.xtel>
  1119. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  1120.           id <09145-0@lancaster.xtel.co.uk>; Wed, 3 Apr 1991 09:42:10 +0100
  1121. To: quipu-bugs@xtel.co.uk
  1122. Subject: TURBO_DISK
  1123. Date: Wed, 03 Apr 91 09:43:36 +0100
  1124. From: Colin Robbins <c.robbins@xtel.co.uk>
  1125.  
  1126. QUIPU VERSION:    6.8
  1127.  
  1128. ISODE VERSION:    6.8
  1129.  
  1130. MACHINE:    Sun 4/330 (X-TEL config)
  1131.  
  1132. O/S:        SunOS 4.1
  1133.  
  1134. PROGRAM:    ros.quipu
  1135.  
  1136. SYNOPSIS:    TURBO_DISK causes a few problems 
  1137.  
  1138. DESCRIPTION:
  1139.  
  1140. REPEAT BY:
  1141.  
  1142. SAMPLE FIX:
  1143.  
  1144. *** /dev/null    Fri Mar 22 10:59:16 1991
  1145. --- quipu/turbo/file2dn.c    Fri Mar 22 11:00:43 1991
  1146. ***************
  1147. *** 0 ****
  1148. --- 1,32 ----
  1149. + #include <stdio.h>
  1150. + main( argc, argv )
  1151. + int    argc;
  1152. + char    **argv;
  1153. + {
  1154. +     char    *dn, *p;
  1155. +     int    prefixlen;
  1156. +     if ( argc < 3 )
  1157. +         prefixlen = 0;
  1158. +     else
  1159. +         prefixlen = strlen( argv[1] );
  1160. +     dn = argv[2] + prefixlen;
  1161. +     if ( *dn == '/' )
  1162. +         dn++;
  1163. +     for ( p = dn; *p; p++ )
  1164. +         if ( *p == '/' )
  1165. +             *p = '@';
  1166. +     for ( ; *p != '@' && p != dn; p-- )
  1167. +         *p = '\0';
  1168. +     *p = '\n';
  1169. +     if ( p == dn )
  1170. +         dn = "root\n";
  1171. +     write( 1, dn, strlen( dn ) );
  1172. + }
  1173. *** /dev/null    Fri Mar 22 10:59:16 1991
  1174. --- quipu/turbo/tdirname.c    Fri Mar 22 11:01:13 1991
  1175. ***************
  1176. *** 0 ****
  1177. --- 1,17 ----
  1178. + main( argc, argv )
  1179. + int    argc;
  1180. + char    **argv;
  1181. + {
  1182. +     char    *p, *rindex();
  1183. +     if ( argc < 2 || ((p = rindex( argv[ 1 ], '/' )) == 0) ) {
  1184. +         write( 1, ".\n", sizeof( ".\n" ) );
  1185. +         exit( 0 );
  1186. +     }
  1187. +     *p = '\0';
  1188. +     write( 1, argv[ 1 ], strlen( argv[ 1 ] ) );
  1189. +     write( 1, "\n", 1 );
  1190. +     exit( 0 );
  1191. + }
  1192. *** quipu/entry_load.oc    Sat Mar 23 16:21:20 1991
  1193. --- quipu/entry_load.c    Sat Mar 23 16:57:50 1991
  1194. ***************
  1195. *** 86,92 ****
  1196. --- 86,96 ----
  1197.   char * file;
  1198.   {
  1199.   FILE * mapfp;
  1200. + #ifdef    TURBO_DISK
  1201. + char *ptr, *newname, *tmp, *fgetline();
  1202. + #else    /* TURBO_DISK */
  1203.   char *ptr, *newname, *tmp, *getline();
  1204. + #endif    /* TURBO_DISK */
  1205.   extern int parse_line;
  1206.   register int i;
  1207.   
  1208. ***************
  1209. *** 96,102 ****
  1210.       }
  1211.   
  1212.       parse_line = 0;
  1213. !     while ( (ptr = getline(mapfp)) != NULLCP) {
  1214.           if ((newname = rindex(ptr,'#')) == NULLCP) {
  1215.               LLOG(log_dsap,LLOG_EXCEPTIONS,("Seperator missing in map file \"%s\", line %d",file,parse_line));
  1216.               (void) fclose (mapfp);            
  1217. --- 100,111 ----
  1218.       }
  1219.   
  1220.       parse_line = 0;
  1221. ! #ifdef    TURBO_DISK
  1222. !     while ( (ptr = fgetline(mapfp)) != NULLCP)
  1223. ! #else    /* TURBO_DISK */
  1224. !     while ( (ptr = getline(mapfp)) != NULLCP) 
  1225. ! #endif    /* TURBO_DISK */
  1226. !     {
  1227.           if ((newname = rindex(ptr,'#')) == NULLCP) {
  1228.               LLOG(log_dsap,LLOG_EXCEPTIONS,("Seperator missing in map file \"%s\", line %d",file,parse_line));
  1229.               (void) fclose (mapfp);            
  1230. *** h/quipu/_turbo.h    Tue Mar 26 10:28:06 1991
  1231. --- h/quipu/turbo.h    Mon Mar 25 10:46:24 1991
  1232. ***************
  1233. *** 108,113 ****
  1234. --- 108,114 ----
  1235.       caddr_t        in_value;
  1236.       struct entry    **in_entries;
  1237.       int        in_num;
  1238. +     int        in_max;
  1239.   } Index_node;
  1240.   
  1241.   #define NULLINDEXNODE    ((Index_node *) 0)
  1242. *** dsap/common/_turbo_index.c    Mon Mar 25 10:20:07 1991
  1243. --- dsap/common/turbo_index.c    Tue Mar 26 13:33:46 1991
  1244. ***************
  1245. *** 101,123 ****
  1246.   Index_node    *node;
  1247.   Index_node    *dup;
  1248.   {
  1249. !     int    i, j;
  1250.       Entry    tmp1, tmp2;
  1251.   
  1252. !     /* check for duplicates */
  1253. !     for ( i = 0; i < node->in_num; i++ ) {
  1254. !         if ( node->in_entries[ i ] == dup->in_entries[ 0 ] )
  1255.               return( NOTOK );
  1256. !         if (node->in_entries[i] > dup->in_entries[0])
  1257. !             break;
  1258.       }
  1259.   
  1260. !     node->in_entries = (struct entry **) realloc( (char *)node->in_entries, 
  1261. !         (unsigned) (sizeof(struct entry *) * (node->in_num + 1) ));
  1262.       node->in_num++;
  1263.   
  1264.       tmp1 = dup->in_entries[0];
  1265. !     for (j = i; j < node->in_num; j++) {
  1266.           tmp2 = node->in_entries[j];
  1267.           node->in_entries[j] = tmp1;
  1268.           tmp1 = tmp2;
  1269. --- 101,162 ----
  1270.   Index_node    *node;
  1271.   Index_node    *dup;
  1272.   {
  1273. !     int    j;
  1274. !     int    low, mid, high;
  1275.       Entry    tmp1, tmp2;
  1276.   
  1277. !     /* 
  1278. !      * Check for duplicates.  If there are over 20 elements we do
  1279. !      * a binary search, otherwise a simple linear one.  This is just
  1280. !      * a guess.  It seems to work pretty well, though.
  1281. !      */
  1282. !     tmp1 = dup->in_entries[0];
  1283. !     if ( node->in_num > 20 ) {
  1284. !         low = 0;
  1285. !         high = node->in_num - 1;
  1286. !         mid = (low + high) / 2;
  1287. !         while ( low < high ) {
  1288. !             if ( node->in_entries[mid] < tmp1 )
  1289. !                 low = mid + 1;
  1290. !             else if ( node->in_entries[mid] > tmp1 )
  1291. !                 high = mid - 1;
  1292. !             else
  1293. !                 break;    /* found a duplicates */
  1294. !             mid = (low + high) / 2;
  1295. !         }
  1296. !         if ( node->in_entries[mid] == tmp1 )
  1297.               return( NOTOK );
  1298. !         else if ( node->in_entries[mid] < tmp1 )
  1299. !             mid++;
  1300. !     } else {
  1301. !         for ( mid = 0; mid < node->in_num; mid++ ) {
  1302. !             if ( node->in_entries[mid] == tmp1 )
  1303. !                 return( NOTOK );
  1304. !             if ( node->in_entries[mid] > tmp1 )
  1305. !                 break;
  1306. !         }
  1307.       }
  1308.   
  1309. !     /*
  1310. !      * Realloc double the space we got last time.  This may waste
  1311. !      * some space in the index, but it speeds things up, works
  1312. !      * around the QUIPU_MALLOC problem, and cuts down on fragmentation.
  1313. !      */
  1314. !     if (node->in_num >= node->in_max) {
  1315. !         node->in_max *= 2;
  1316. !         node->in_entries =
  1317. !             (struct entry **) realloc((char *)node->in_entries, 
  1318. !             (unsigned) (sizeof(struct entry *) * node->in_max));
  1319. !     }
  1320.       node->in_num++;
  1321.   
  1322.       tmp1 = dup->in_entries[0];
  1323. !     for (j = mid; j < node->in_num; j++) {
  1324.           tmp2 = node->in_entries[j];
  1325.           node->in_entries[j] = tmp1;
  1326.           tmp1 = tmp2;
  1327. ***************
  1328. *** 430,435 ****
  1329. --- 469,475 ----
  1330.               entry *) );
  1331.           imem->in_entries[ 0 ] = (struct entry *) e;
  1332.           imem->in_num = 1;
  1333. +         imem->in_max = 1;
  1334.   
  1335.           /*
  1336.            * Now we insert the entry into the appropriate index.
  1337. ***************
  1338. *** 462,467 ****
  1339. --- 502,508 ----
  1340.                   sizeof(struct entry *) );
  1341.               imem->in_entries[ 0 ] = (struct entry *) e;
  1342.               imem->in_num = 1;
  1343. +             imem->in_max = 1;
  1344.   
  1345.               if ( avl_insert( &pindex[i].i_sroot, (caddr_t) imem, sindex_cmp,
  1346.                   index_dup ) == OK ) {
  1347. ***************
  1348. *** 817,822 ****
  1349. --- 858,867 ----
  1350.           LLOG( log_dsap, LLOG_EXCEPTIONS, ("Invalid subtree (%s)\n", tree) );
  1351.           return;
  1352.       }
  1353. +     if ( turbo_index_num == 0 ) {
  1354. +         LLOG( log_dsap, LLOG_EXCEPTIONS, ("WARNING: cannot index subtree - no attributes have been optimized"));
  1355. +         return;
  1356. +     }
  1357.   
  1358.       pindex = new_index( dn );
  1359.       dn_free( dn );
  1360. ***************
  1361. *** 840,845 ****
  1362. --- 885,894 ----
  1363.   
  1364.       if ( (dn = str2dn( parent )) == NULLDN ) {
  1365.           LLOG( log_dsap, LLOG_EXCEPTIONS, ("Invalid parent (%s)\n", parent) );
  1366. +         return;
  1367. +     }
  1368. +     if ( turbo_index_num == 0 ) {
  1369. +         LLOG( log_dsap, LLOG_EXCEPTIONS, ("WARNING: cannot index siblings - no attributes have been optimized"));
  1370.           return;
  1371.       }
  1372.   
  1373. *** quipu/turbo/file2dn.c.orig    Fri Mar 22 11:00:43 1991
  1374. --- quipu/turbo/file2dn.c    Wed Mar 27 10:17:22 1991
  1375. ***************
  1376. *** 1,32 ****
  1377.   #include <stdio.h>
  1378.   
  1379. ! main( argc, argv )
  1380.   int    argc;
  1381.   char    **argv;
  1382.   {
  1383. !     char    *dn, *p;
  1384.       int    prefixlen;
  1385.   
  1386. !     if ( argc < 3 )
  1387.           prefixlen = 0;
  1388.       else
  1389. !         prefixlen = strlen( argv[1] );
  1390.   
  1391. !     dn = argv[2] + prefixlen;
  1392.   
  1393. !     if ( *dn == '/' )
  1394.           dn++;
  1395.   
  1396. !     for ( p = dn; *p; p++ )
  1397. !         if ( *p == '/' )
  1398. !             *p = '@';
  1399.   
  1400. !     for ( ; *p != '@' && p != dn; p-- )
  1401. !         *p = '\0';
  1402. !     *p = '\n';
  1403. !     if ( p == dn )
  1404. !         dn = "root\n";
  1405. !     write( 1, dn, strlen( dn ) );
  1406.   }
  1407. --- 1,55 ----
  1408.   #include <stdio.h>
  1409. + #include <string.h>
  1410.   
  1411. ! main(argc, argv)
  1412.   int    argc;
  1413.   char    **argv;
  1414.   {
  1415. !     char    *dn, *p, *mp;
  1416.       int    prefixlen;
  1417. +     int    mapped;
  1418. +     char    mapbuf[BUFSIZ];
  1419. +     char    dnbuf[3 * BUFSIZ];
  1420. +     char    mapfile[BUFSIZ];
  1421. +     FILE    *map;
  1422.   
  1423. !     if (argc < 3)
  1424.           prefixlen = 0;
  1425.       else
  1426. !         prefixlen = strlen(argv[1]);
  1427.   
  1428. !     dn = argv[argc - 1] + prefixlen;
  1429.   
  1430. !     if (*dn == '/')
  1431.           dn++;
  1432.   
  1433. !     dnbuf[0] = '\0';
  1434.   
  1435. !     while ((p = strchr(dn, '/')) != NULL) {
  1436. !         strncpy(mapfile, argv[argc - 1], dn - argv[argc - 1]);
  1437. !         mapfile[dn - argv[argc - 1]] = '\0';
  1438. !         strcat(mapfile, "EDB.map");
  1439. !         mapped = 0;
  1440. !         if ((map = fopen(mapfile, "r")) != NULL) {
  1441. !             while (fgets(mapbuf, BUFSIZ, map) != NULL)
  1442. !                 if ((mp = strchr(mapbuf, '#')) != NULL) {
  1443. !                     *mp++ = '\0';
  1444. !                     if (!strncmp(mp, dn, p - dn)) {
  1445. !                         strcat(dnbuf, mapbuf);
  1446. !                         mapped++;
  1447. !                         break;
  1448. !                     }
  1449. !                 }
  1450. !             fclose(map);
  1451. !         }
  1452. !         if (!mapped)
  1453. !             strncat(dnbuf, dn, p - dn);
  1454. !         strcat(dnbuf, "@");
  1455. !         dn = p + 1;
  1456. !     }
  1457. !     if (strlen(dnbuf) == 0)
  1458. !         strcpy(dnbuf, "root@");
  1459. !     p = strrchr(dnbuf, '@');
  1460. !     *p = '\0';
  1461. !     puts(dnbuf);
  1462.   }
  1463. *** quipu/turbo/_edb2dbm.c    Wed Apr  3 14:50:30 1991
  1464. --- quipu/turbo/edb2dbm.c    Wed Apr  3 14:50:41 1991
  1465. ***************
  1466. *** 106,111 ****
  1467. --- 106,112 ----
  1468.       }
  1469.   
  1470.       (void) gdbm_close(db);
  1471. +     exit(0);
  1472.   }
  1473.   
  1474.   
  1475. *** quipu/turbo/_edbcat.c    Wed Apr  3 14:50:55 1991
  1476. --- quipu/turbo/edbcat.c    Wed Apr  3 14:50:59 1991
  1477. ***************
  1478. *** 52,55 ****
  1479. --- 52,56 ----
  1480.       }
  1481.   
  1482.       (void) gdbm_close(db);
  1483. +     exit(0);
  1484.   }
  1485. *** quipu/turbo/_file2dn.c    Wed Apr  3 14:51:19 1991
  1486. --- quipu/turbo/file2dn.c    Wed Apr  3 14:51:23 1991
  1487. ***************
  1488. *** 52,55 ****
  1489. --- 52,56 ----
  1490.       p = strrchr(dnbuf, '@');
  1491.       *p = '\0';
  1492.       puts(dnbuf);
  1493. +     exit(0);
  1494.   }
  1495. ORIGINAL REPORT:
  1496.  
  1497. ------- Forwarded Messages
  1498.  
  1499. Subject: TURBO_DISK
  1500. Reported-On: Fri, 22 Mar 91 07:37:46 +0000
  1501. Reported-By: "Andrew Macpherson (Postmaster)" <A.Macpherson@stl.stc.co.uk>
  1502. Reported-To: quipu-support@cs.ucl.ac.uk
  1503.  
  1504.  
  1505. Thought I'ld try it:
  1506.  
  1507. isode-interim/quipu/turbo }- ./make
  1508. make: Fatal error: Don't know how to make target `file2dn.o'
  1509.  
  1510. no file2dn.c ?
  1511.  
  1512. May I have a copy --- I've 9000 changes, and 6000 additions to make, so this 
  1513. might help me get it done in sensible time.
  1514.  
  1515.  
  1516. ------- Message 2
  1517.  
  1518. Subject: Re: TURBO_DISK
  1519. Reported-On: Sat, 23 Mar 91 17:08:05 +0000
  1520. Reported-By: "Andrew Macpherson (Postmaster)" <andrew@uk.co.stc.stl.palm13>
  1521. Reported-To: quipu-support@cs.ucl.ac.uk
  1522.  
  1523. A small problem --- trying to read edb.map files as gdbm hashed files
  1524. is fixed with this patch.
  1525.  
  1526. Regards
  1527.     Andrew.
  1528. PS aren't weekends wonderful times to get things done?
  1529.  
  1530. *** CJR ***
  1531. Patch removed and placed with a full set of fixes above
  1532. ***********
  1533.  
  1534. ------- End of Forwarded Messages
  1535.  
  1536. -------------------- Bug No 17 --------------------------
  1537. Return-Path: <c.robbins@uk.co.xtel>
  1538. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  1539.           id <09254-0@lancaster.xtel.co.uk>; Wed, 3 Apr 1991 09:49:47 +0100
  1540. To: quipu-bugs@xtel.co.uk
  1541. Subject: dish on HP-UX
  1542. Date: Wed, 03 Apr 91 09:51:10 +0100
  1543. From: Colin Robbins <c.robbins@xtel.co.uk>
  1544.  
  1545. QUIPU VERSION:    6.8
  1546.  
  1547. ISODE VERSION:    6.8
  1548.  
  1549. MACHINE:    HP
  1550.  
  1551. O/S:        HP-UX
  1552.  
  1553. PROGRAM:    little dish binaries
  1554.  
  1555. SYNOPSIS:    There is a problem with building
  1556.         others/quipu/uips/dish under HP-UX
  1557.  
  1558. DESCRIPTION:
  1559.  
  1560. REPEAT BY:
  1561.  
  1562. SAMPLE FIX:
  1563.  
  1564. *** /tmp/,RCSt1a17674    Wed Mar 27 17:43:13 1991
  1565. --- others/quipu/uips/dish/quipurc.c    Wed Mar 27 17:23:07 1991
  1566. ***************
  1567. *** 183,188
  1568.       Local[0] = 0;
  1569.   
  1570.       (void) stat(tailor_file, &buf) ;
  1571.       (void) seteuid(buf.st_uid) ;    /* set effective to enable */
  1572.                       /* us to read protected file */
  1573.   
  1574.  
  1575. --- 183,189 -----
  1576.       Local[0] = 0;
  1577.   
  1578.       (void) stat(tailor_file, &buf) ;
  1579. + #ifndef HPUX
  1580.       (void) seteuid(buf.st_uid) ;    /* set effective to enable */
  1581.                       /* us to read protected file */
  1582.   #else
  1583. ***************
  1584. *** 185,190
  1585.       (void) stat(tailor_file, &buf) ;
  1586.       (void) seteuid(buf.st_uid) ;    /* set effective to enable */
  1587.                       /* us to read protected file */
  1588.   
  1589.       if ((fp_tailor = fopen(tailor_file, "r")) == 0)
  1590.       {
  1591.  
  1592. --- 186,195 -----
  1593.   #ifndef HPUX
  1594.       (void) seteuid(buf.st_uid) ;    /* set effective to enable */
  1595.                       /* us to read protected file */
  1596. + #else
  1597. +     (void) setresuid(-1, buf.st_uid, -1) ; /* set effective to enable */
  1598. +                 /* us to read protected file */
  1599. + #endif
  1600.   
  1601.       if ((fp_tailor = fopen(tailor_file, "r")) == 0)
  1602.       {
  1603. ***************
  1604. *** 552,557
  1605.    */
  1606.       (void) ds_unbind() ;
  1607.       (void) unlink(tmpdraft) ;
  1608.   }
  1609.   
  1610.   void
  1611.  
  1612. --- 557,564 -----
  1613.    */
  1614.       (void) ds_unbind() ;
  1615.       (void) unlink(tmpdraft) ;
  1616. +     return(0);
  1617.   }
  1618.   
  1619.   void
  1620.  
  1621. ORIGINAL REPORT:
  1622.  
  1623. ------- Forwarded Message
  1624.  
  1625. Subject: others/quipu/uips/dish fix
  1626. Reported-On: Wed, 27 Mar 91 17:46:46 -0800
  1627. Reported-By: Norman Kincl <kincl@iag.hp.com>
  1628. Reported-To: wpp-camayocs@nisc.psi.net
  1629.  
  1630. There is a problem with building others/quipu/uips/dish under HP-UX (and
  1631. probably other SYS5 systems).  The file quipurc.c needs the following changes:
  1632.  
  1633. *** CJR ***
  1634. official fix above
  1635. ***********
  1636. ------- End of Forwarded Message
  1637.  
  1638. -------------------- Bug No 18 --------------------------
  1639. Return-Path: <c.robbins@uk.co.xtel>
  1640. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  1641.           id <09316-0@lancaster.xtel.co.uk>; Wed, 3 Apr 1991 09:55:10 +0100
  1642. To: quipu-bugs@xtel.co.uk
  1643. Subject: removeing TURBO_AVL
  1644. Date: Wed, 03 Apr 91 09:56:34 +0100
  1645. From: Colin Robbins <c.robbins@xtel.co.uk>
  1646.  
  1647. QUIPU VERSION:    6.8
  1648.  
  1649. ISODE VERSION:    6.8
  1650.  
  1651. MACHINE:    Sun 4/330 (X-TEL config)
  1652.  
  1653. O/S:        SunOS 4.1
  1654.  
  1655. PROGRAM:    ros.quipu
  1656.  
  1657. SYNOPSIS:    Can't compile if TURBO_AVL is not defined
  1658.  
  1659. DESCRIPTION:
  1660.  
  1661. REPEAT BY:
  1662.  
  1663. SAMPLE FIX:
  1664.  
  1665. *** quipu/_ds_remove.c    Mon Apr  1 12:07:32 1991
  1666. --- quipu/ds_remove.c    Mon Apr  1 12:08:38 1991
  1667. ***************
  1668. *** 178,184 ****
  1669.           {
  1670.           DN      save_dn ;
  1671.           char   *filename ;
  1672. !         Entry   empty_entry = get_default_entry (NULLENTRY) ;
  1673.           char   *dn2edbfile() ;
  1674.   
  1675.           empty_entry->e_data = E_DATA_MASTER ;
  1676. --- 178,184 ----
  1677.           {
  1678.           DN      save_dn ;
  1679.           char   *filename ;
  1680. !         Entry   empty_entry = get_default_entry (entryptr->e_parent) ;
  1681.           char   *dn2edbfile() ;
  1682.   
  1683.           empty_entry->e_data = E_DATA_MASTER ;
  1684. *** quipu/_turbo_disk.c    Mon Apr  1 12:48:45 1991
  1685. --- quipu/turbo_disk.c    Mon Apr  1 12:48:56 1991
  1686. ***************
  1687. *** 218,224 ****
  1688.       save_heap = mem_heap;
  1689.       GENERAL_HEAP;
  1690.   
  1691. !     if ( (db = turbo_open(e->e_parent, 0)) == NULL ) {
  1692.           mem_heap = save_heap;
  1693.           return(NOTOK);
  1694.       }
  1695. --- 218,224 ----
  1696.       save_heap = mem_heap;
  1697.       GENERAL_HEAP;
  1698.   
  1699. !     if ( (db = turbo_open(e->e_parent, 1)) == NULL ) {
  1700.           mem_heap = save_heap;
  1701.           return(NOTOK);
  1702.       }
  1703. *** quipu/_turbo_disk.c    Tue Apr  2 17:20:37 1991
  1704. --- quipu/turbo_disk.c    Tue Apr  2 17:22:53 1991
  1705. ***************
  1706. *** 54,62 ****
  1707.    * otherwise it will and a backup of the old one will be made.
  1708.    */
  1709.   
  1710. ! static GDBM_FILE turbo_open(parent, create)
  1711.   Entry    parent;
  1712. ! char    create;
  1713.   {
  1714.       GDBM_FILE    db;
  1715.       DN        dn, get_copy_dn();
  1716. --- 54,63 ----
  1717.    * otherwise it will and a backup of the old one will be made.
  1718.    */
  1719.   
  1720. ! static GDBM_FILE turbo_open(parent, create, backup)
  1721.   Entry    parent;
  1722. ! int    create;
  1723. ! int    backup;
  1724.   {
  1725.       GDBM_FILE    db;
  1726.       DN        dn, get_copy_dn();
  1727. ***************
  1728. *** 80,91 ****
  1729.   
  1730.       /* try to open it */
  1731.       if ( create ) {
  1732. !         /* first make a backup of the old one */
  1733. !         (void) unlink(bakname);
  1734. !         if ( link(turbo_gfname, bakname) != 0 )
  1735. !             LLOG (log_dsap, LLOG_EXCEPTIONS, 
  1736. !                 ("turbo: could not make backup"));
  1737. !         (void) unlink(turbo_gfname);
  1738.   
  1739.           /* then open the new one */
  1740.           db = gdbm_open(turbo_gfname, 0, GDBM_WRCREAT, 0600, 0);
  1741. --- 81,94 ----
  1742.   
  1743.       /* try to open it */
  1744.       if ( create ) {
  1745. !         if ( backup ) {
  1746. !             /* first make a backup of the old one */
  1747. !             (void) unlink(bakname);
  1748. !             if ( link(turbo_gfname, bakname) != 0 )
  1749. !                 LLOG (log_dsap, LLOG_EXCEPTIONS, 
  1750. !                     ("turbo: could not make backup"));
  1751. !             (void) unlink(turbo_gfname);
  1752. !         }
  1753.   
  1754.           /* then open the new one */
  1755.           db = gdbm_open(turbo_gfname, 0, GDBM_WRCREAT, 0600, 0);
  1756. ***************
  1757. *** 176,182 ****
  1758.       save_heap = mem_heap;
  1759.       GENERAL_HEAP;
  1760.   
  1761. !     if ((db = turbo_open(e, 1)) == NULL) {
  1762.           mem_heap = save_heap;
  1763.           return(NOTOK);
  1764.       }
  1765. --- 179,185 ----
  1766.       save_heap = mem_heap;
  1767.       GENERAL_HEAP;
  1768.   
  1769. !     if ((db = turbo_open(e, 1, 1)) == NULL) {
  1770.           mem_heap = save_heap;
  1771.           return(NOTOK);
  1772.       }
  1773. ***************
  1774. *** 218,224 ****
  1775.       save_heap = mem_heap;
  1776.       GENERAL_HEAP;
  1777.   
  1778. !     if ( (db = turbo_open(e->e_parent, 1)) == NULL ) {
  1779.           mem_heap = save_heap;
  1780.           return(NOTOK);
  1781.       }
  1782. --- 221,227 ----
  1783.       save_heap = mem_heap;
  1784.       GENERAL_HEAP;
  1785.   
  1786. !     if ( (db = turbo_open(e->e_parent, 1, 0)) == NULL ) {
  1787.           mem_heap = save_heap;
  1788.           return(NOTOK);
  1789.       }
  1790. ***************
  1791. *** 260,266 ****
  1792.       save_heap = mem_heap;
  1793.       GENERAL_HEAP;
  1794.   
  1795. !     if ( (db = turbo_open(e->e_parent, 0)) == NULL ) {
  1796.           mem_heap = save_heap;
  1797.           return(NOTOK);
  1798.       }
  1799. --- 263,269 ----
  1800.       save_heap = mem_heap;
  1801.       GENERAL_HEAP;
  1802.   
  1803. !     if ( (db = turbo_open(e->e_parent, 0, 0)) == NULL ) {
  1804.           mem_heap = save_heap;
  1805.           return(NOTOK);
  1806.       }
  1807.  
  1808.  
  1809. ORIGINAL REPORT:
  1810.  
  1811. ------- Forwarded Message
  1812.  
  1813. Reported-On: Sun, 31 Mar 91 21:29:35 -0800
  1814. Reported-By: clarity!bluenotes.clarity.com!bruceb@fernwood.mpk.ca.us (Bruce Bli
  1815.       nn)
  1816.  
  1817. I have installed the new Quipu 6.8 on my system and found a problem when
  1818. trying to delete the last entry from a node (this used to in an unwilling
  1819. to perform error).  The DSA gets a segmentation violation in the procedure
  1820. entry_block_print when it tries to dereference block->e_parent->e_children
  1821. since block->e_parent is NULL.
  1822.  
  1823. I tried to recompile with TURBO_AVL undefined, but then the following
  1824. files did not compile:
  1825.  
  1826.     dsap/x500as/asn_ext.c
  1827.     quipu/ds_modify.c
  1828.     quipu/turbo_debug.c
  1829.  
  1830. and entry_cmp() was undefined.  I fixed all these, but got yet another
  1831. segmentation violation from somewhere in entry_load.c and decided to abandon
  1832. this approach.
  1833.  
  1834. I changed the if statement in entry_block_print to explicitly look for
  1835. block->e_parent != NULL, and this seems to work fine.  Is this causing or
  1836. masking any other problems?  Is there a better solution?
  1837.  
  1838. Thanx
  1839. Bruce Blinn
  1840. bruceb@clarity.com
  1841.  
  1842.  
  1843. ------- End of Forwarded Message
  1844.  
  1845. -------------------- Bug No 19 --------------------------
  1846. Return-Path: <c.robbins@uk.co.xtel>
  1847. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  1848.           id <12133-0@lancaster.xtel.co.uk>; Wed, 3 Apr 1991 11:23:26 +0100
  1849. To: quipu-bugs@xtel.co.uk
  1850. Subject: DSA.pseudo
  1851. Date: Wed, 03 Apr 91 11:24:52 +0100
  1852. From: Colin Robbins <c.robbins@xtel.co.uk>
  1853.  
  1854. QUIPU VERSION:    6.8
  1855.  
  1856. ISODE VERSION:    6.8
  1857.  
  1858. MACHINE:    Sun 4/330 (X-TEL config)
  1859.  
  1860. O/S:        SunOS 4.1
  1861.  
  1862. PROGRAM:    ros.quipu
  1863.  
  1864. SYNOPSIS:    If DSA.real file is missing, DSA may core dump.
  1865.  
  1866. DESCRIPTION:
  1867.  
  1868. REPEAT BY:
  1869.  
  1870. SAMPLE FIX:
  1871.  
  1872. *** quipu/_pseudo.c    Wed Apr  3 11:14:23 1991
  1873. --- quipu/pseudo.c    Wed Apr  3 11:14:56 1991
  1874. ***************
  1875. *** 270,276 ****
  1876.           if ((dsa_real_attr = get_attributes (fptr)) == NULLATTR)
  1877.   #endif
  1878.               LLOG (log_dsap,LLOG_TRACE,("Error in DSA real entry: \"%s\" (%d)",filename,errno));
  1879.       }
  1880.   
  1881. -     (void) fclose (fptr);
  1882.   }
  1883. --- 270,277 ----
  1884.           if ((dsa_real_attr = get_attributes (fptr)) == NULLATTR)
  1885.   #endif
  1886.               LLOG (log_dsap,LLOG_TRACE,("Error in DSA real entry: \"%s\" (%d)",filename,errno));
  1887. +         (void) fclose (fptr);
  1888.       }
  1889.   
  1890.   }
  1891.  
  1892. ORIGINAL REPORT:
  1893.  
  1894. ------- Forwarded Message
  1895.  
  1896. Subject: Missing DSA.real and DSA.pseudo files
  1897. Reported-On: Tue, 27 Mar 90 00:27:35 -0600
  1898. Reported-By: kiran@konark.lkg.dec.com (Kiran Somalwar)
  1899. Reported-To: bug-isode@nisc.psi.net
  1900.  
  1901.  
  1902. I am in section 2.7.4 of the white pages administrator guide for testing
  1903. the stand-alone DSA when this error happens:
  1904.  
  1905. On giving the command
  1906.  ros.quipu -t ./quiputailor
  1907. the error is
  1908. Bus error (core dumped) There are no files named DSA.real and DSA.pseudo in the
  1909.  current
  1910. directory.
  1911.  
  1912. ( *** CJR: logging info deleted *** )
  1913.  
  1914. ------- End of Forwarded Message
  1915.  
  1916. -------------------- Bug No 20 --------------------------
  1917. Return-Path: <c.robbins@uk.co.xtel>
  1918. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  1919.           id <16476-0@lancaster.xtel.co.uk>; Wed, 3 Apr 1991 16:18:04 +0100
  1920. To: quipu-bugs@xtel.co.uk
  1921. Subject: installing dsap lint lib
  1922. Date: Wed, 03 Apr 91 16:19:31 +0100
  1923. From: Colin Robbins <c.robbins@xtel.co.uk>
  1924.  
  1925. QUIPU VERSION:    6.8
  1926.  
  1927. ISODE VERSION:    6.8
  1928.  
  1929. MACHINE:    Sun 4/330 (X-TEL config)
  1930.  
  1931. O/S:        SunOS 4.1
  1932.  
  1933. PROGRAM:    libdsap
  1934.  
  1935. SYNOPSIS:    You get a large number of errors when installing
  1936.         the libdsap lint library
  1937.  
  1938. DESCRIPTION:
  1939.  
  1940. REPEAT BY:
  1941.  
  1942. SAMPLE FIX:
  1943.  
  1944. *** dsap/_Makefile    Wed Apr  3 11:55:11 1991
  1945. --- dsap/Makefile    Wed Apr  3 11:57:25 1991
  1946. ***************
  1947. *** 111,117 ****
  1948.               < llib-ldsap | \
  1949.               sed -e 's%#include "$(INCDIR)quipu/\([A-Z].*\)"%#include "$(INCDIR)pepsy/\1"%' | \
  1950.               sed -e 's%#include "/usr/include/\(.*\)"%#include <\1>%' > $@
  1951. !         @$(UTILDIR)inst-lint.sh $(SYSTEM) -I$(INCDIRM) $(OPTIONS) $@
  1952.           -@ls -gls $@ $@.ln
  1953.           -@echo ""
  1954.   
  1955. --- 111,117 ----
  1956.               < llib-ldsap | \
  1957.               sed -e 's%#include "$(INCDIR)quipu/\([A-Z].*\)"%#include "$(INCDIR)pepsy/\1"%' | \
  1958.               sed -e 's%#include "/usr/include/\(.*\)"%#include <\1>%' > $@
  1959. !         @$(UTILDIR)inst-lint.sh $(SYSTEM) -I$(INCDIR).. $(OPTIONS) $@
  1960.           -@ls -gls $@ $@.ln
  1961.           -@echo ""
  1962.   
  1963.  
  1964. ORIGINAL REPORT:
  1965.          various.
  1966. -------------------- Bug No 21 --------------------------
  1967. Return-Path: <c.robbins@uk.co.xtel>
  1968. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  1969.           id <16514-0@lancaster.xtel.co.uk>; Wed, 3 Apr 1991 16:22:08 +0100
  1970. To: quipu-bugs@xtel.co.uk
  1971. Subject: duplicates in oidtables
  1972. Date: Wed, 03 Apr 91 16:23:35 +0100
  1973. From: Colin Robbins <c.robbins@xtel.co.uk>
  1974.  
  1975. QUIPU VERSION:    6.8
  1976.  
  1977. ISODE VERSION:    6.8
  1978.  
  1979. MACHINE:    Sun 4/330 (X-TEL config)
  1980.  
  1981. O/S:        SunOS 4.1
  1982.  
  1983. PROGRAM:    all QUIPU binaries
  1984.  
  1985. SYNOPSIS:    Duplicat entries in the oidtables are not trapped
  1986.  
  1987. DESCRIPTION:
  1988.  
  1989. REPEAT BY:
  1990.  
  1991. SAMPLE FIX:
  1992. *** dsap/common/_oid.c    Wed Apr  3 15:05:32 1991
  1993. --- dsap/common/oid.c    Wed Apr  3 15:32:31 1991
  1994. ***************
  1995. *** 127,133 ****
  1996.       while (1) {     /* break out */
  1997.           if ( (name = get_entry ()) == NULLCP)
  1998.               break;
  1999. !         add_entry (name,GEN);
  2000.       }
  2001.       (void) fclose (f_table);
  2002.   
  2003. --- 127,134 ----
  2004.       while (1) {     /* break out */
  2005.           if ( (name = get_entry ()) == NULLCP)
  2006.               break;
  2007. !         if (! add_entry (name,GEN))
  2008. !             fatal (-91,"Can't load oidtable.gen");
  2009.       }
  2010.       (void) fclose (f_table);
  2011.   
  2012. ***************
  2013. *** 140,146 ****
  2014.       while (1) {     /* break out */
  2015.           if ( (name = get_entry ()) == NULLCP)
  2016.               break;
  2017. !         add_entry (name,ATTR);
  2018.       }
  2019.       (void) fclose (f_table);
  2020.   
  2021. --- 141,148 ----
  2022.       while (1) {     /* break out */
  2023.           if ( (name = get_entry ()) == NULLCP)
  2024.               break;
  2025. !         if (!add_entry (name,ATTR))
  2026. !             fatal (-92,"Can't load oidtable.at");
  2027.       }
  2028.       (void) fclose (f_table);
  2029.   
  2030. ***************
  2031. *** 153,159 ****
  2032.       while (1) {     /* break out */
  2033.           if ( (name = get_entry ()) == NULLCP)
  2034.               break;
  2035. !         add_entry (name,OC);
  2036.       }
  2037.       (void) fclose (f_table);
  2038.   
  2039. --- 155,162 ----
  2040.       while (1) {     /* break out */
  2041.           if ( (name = get_entry ()) == NULLCP)
  2042.               break;
  2043. !         if (!add_entry (name,OC))
  2044. !             fatal (-93,"Can't load oidtable.oc");
  2045.       }
  2046.       (void) fclose (f_table);
  2047.   
  2048. ***************
  2049. *** 168,177 ****
  2050.       int        i;
  2051.       register struct pair *p;
  2052.   
  2053.       if ((p = (struct pair *) calloc (1, sizeof *p)) == NULL) {
  2054.       SLOG (log_dsap, LLOG_EXCEPTIONS, NULLCP,
  2055. !           ("calloc of alias structure failed"));
  2056. !     return;
  2057.       }
  2058.   
  2059.       p -> p_name = a;
  2060. --- 171,190 ----
  2061.       int        i;
  2062.       register struct pair *p;
  2063.   
  2064. +     for (p = Pbuckets[PHASH (a)];
  2065. +     p && lexequ (p -> p_name, a);
  2066. +     p = p -> p_chain) 
  2067. +         ; /* NO-OP */
  2068. +     if ( p ) {
  2069. +     LLOG (log_dsap,LLOG_FATAL,("duplicate OID '%s'",a));
  2070. +     return FALSE;
  2071. +     }
  2072.       if ((p = (struct pair *) calloc (1, sizeof *p)) == NULL) {
  2073.       SLOG (log_dsap, LLOG_EXCEPTIONS, NULLCP,
  2074. !           ("calloc of oid hash structure failed"));
  2075. !     return FALSE;
  2076.       }
  2077.   
  2078.       p -> p_name = a;
  2079. ***************
  2080. *** 181,190 ****
  2081.       Pbuckets[i] = p;
  2082.   
  2083.       if (d != NULLCP) {
  2084.       if ((p = (struct pair *) calloc (1, sizeof *p)) == NULL) {
  2085.           SLOG (log_dsap, LLOG_EXCEPTIONS, NULLCP,
  2086. !                         ("calloc of alias (2) structure failed"));
  2087. !         return;
  2088.           }
  2089.   
  2090.       Palias[Palias_next].a_full = a;
  2091. --- 194,213 ----
  2092.       Pbuckets[i] = p;
  2093.   
  2094.       if (d != NULLCP) {
  2095. +     for (p = Pbuckets[PHASH (d)];
  2096. +          p && lexequ (p -> p_name, d);
  2097. +          p = p -> p_chain) 
  2098. +         ; /* NO-OP */
  2099. +     if ( p ) {
  2100. +         LLOG (log_dsap,LLOG_FATAL,("duplicate alias OID '%s'",d));
  2101. +         return FALSE;
  2102. +     }
  2103.       if ((p = (struct pair *) calloc (1, sizeof *p)) == NULL) {
  2104.           SLOG (log_dsap, LLOG_EXCEPTIONS, NULLCP,
  2105. !                         ("calloc of alias hash structure failed"));
  2106. !         return FALSE;
  2107.           }
  2108.   
  2109.       Palias[Palias_next].a_full = a;
  2110. ***************
  2111. *** 197,202 ****
  2112. --- 220,226 ----
  2113.           Pbuckets[i] = p;
  2114.       }
  2115.   
  2116. +     return TRUE;
  2117.   }
  2118.   
  2119.   
  2120. ***************
  2121. *** 211,217 ****
  2122.   
  2123.       if ((nptr = index (newname,SEPERATOR)) == 0) {
  2124.           LLOG (log_dsap,LLOG_FATAL,("oid missing in %s",newname));
  2125. !         return;
  2126.       }
  2127.       *nptr = 0;
  2128.       if ((sep = index (newname,COMMA)) != 0) {
  2129. --- 235,241 ----
  2130.   
  2131.       if ((nptr = index (newname,SEPERATOR)) == 0) {
  2132.           LLOG (log_dsap,LLOG_FATAL,("oid missing in %s",newname));
  2133. !         return FALSE;
  2134.       }
  2135.       *nptr = 0;
  2136.       if ((sep = index (newname,COMMA)) != 0) {
  2137. ***************
  2138. *** 224,240 ****
  2139.           case GEN:
  2140.               Current = &OIDTable[NumEntries];
  2141.               Current->ot_name = strdup(newname);
  2142. !             add_entry_aux (Current->ot_name,(caddr_t)&OIDTable[NumEntries],GEN,alias);
  2143.               break;
  2144.           case ATTR:
  2145.               Current = &attrOIDTable[attrNumEntries].oa_ot;
  2146.               Current->ot_name = strdup(newname);
  2147. !             add_entry_aux (Current->ot_name,(caddr_t)&attrOIDTable[attrNumEntries],ATTR,alias);
  2148.               break;
  2149.           case OC:
  2150.               Current = &ocOIDTable[ocNumEntries].oc_ot;
  2151.               Current->ot_name = strdup(newname);
  2152. !             add_entry_aux (Current->ot_name,(caddr_t)&ocOIDTable[ocNumEntries],OC,alias);
  2153.               break;
  2154.           }
  2155.       *nptr = SEPERATOR;
  2156. --- 248,267 ----
  2157.           case GEN:
  2158.               Current = &OIDTable[NumEntries];
  2159.               Current->ot_name = strdup(newname);
  2160. !             if (!add_entry_aux (Current->ot_name,(caddr_t)&OIDTable[NumEntries],GEN,alias))
  2161. !                 return FALSE;
  2162.               break;
  2163.           case ATTR:
  2164.               Current = &attrOIDTable[attrNumEntries].oa_ot;
  2165.               Current->ot_name = strdup(newname);
  2166. !             if (!add_entry_aux (Current->ot_name,(caddr_t)&attrOIDTable[attrNumEntries],ATTR,alias))
  2167. !                 return FALSE;
  2168.               break;
  2169.           case OC:
  2170.               Current = &ocOIDTable[ocNumEntries].oc_ot;
  2171.               Current->ot_name = strdup(newname);
  2172. !             if (!add_entry_aux (Current->ot_name,(caddr_t)&ocOIDTable[ocNumEntries],OC,alias))
  2173. !                 return FALSE;
  2174.               break;
  2175.           }
  2176.       *nptr = SEPERATOR;
  2177. ***************
  2178. *** 248,254 ****
  2179.           *ptr++ = 0;
  2180.           if (( p = get_oid (ptr)) == NULLCP) {
  2181.               LLOG (log_dsap,LLOG_FATAL,("invalid alias oid '%s'",ptr));
  2182. !             return;
  2183.           }
  2184.           if ((oid = str2oid (p)) == NULLOID)
  2185.               Current->ot_aliasoid = NULLOID;
  2186. --- 275,281 ----
  2187.           *ptr++ = 0;
  2188.           if (( p = get_oid (ptr)) == NULLCP) {
  2189.               LLOG (log_dsap,LLOG_FATAL,("invalid alias oid '%s'",ptr));
  2190. !             return FALSE;
  2191.           }
  2192.           if ((oid = str2oid (p)) == NULLOID)
  2193.               Current->ot_aliasoid = NULLOID;
  2194. ***************
  2195. *** 258,264 ****
  2196.       ptr = get_oid (nptr);
  2197.       if (ptr == NULLCP) {
  2198.           LLOG (log_dsap,LLOG_FATAL,("invalid oid '%s'",nptr));
  2199. !         return;
  2200.       }
  2201.       Current->ot_stroid = strdup(ptr);
  2202.   
  2203. --- 285,291 ----
  2204.       ptr = get_oid (nptr);
  2205.       if (ptr == NULLCP) {
  2206.           LLOG (log_dsap,LLOG_FATAL,("invalid oid '%s'",nptr));
  2207. !         return FALSE;
  2208.       }
  2209.       Current->ot_stroid = strdup(ptr);
  2210.   
  2211. ***************
  2212. *** 275,288 ****
  2213.               NumEntries++;   /* nothing else to do */
  2214.               break;
  2215.           case ATTR:
  2216. !             if (sep == 0)
  2217.                   LLOG (log_dsap,LLOG_FATAL,("syntax missing in %s",newname));
  2218. !             else {
  2219.                   if (( ptr = index (sep,SEPERATOR)) != NULLCP) {
  2220.                       *ptr++ = 0;
  2221. !                     if (lexequ (ptr,"FILE") != 0)
  2222.                           LLOG (log_dsap,LLOG_FATAL,("FILE syntax expected, '%s' found",ptr));
  2223. !                     else {
  2224.                           attrOIDTable[attrNumEntries].oa_syntax = str2syntax(sep);
  2225.                           attrOIDTable[attrNumEntries].oa_syntax += AV_WRITE_FILE;
  2226.                           attrNumEntries++;
  2227. --- 302,317 ----
  2228.               NumEntries++;   /* nothing else to do */
  2229.               break;
  2230.           case ATTR:
  2231. !             if (sep == 0) {
  2232.                   LLOG (log_dsap,LLOG_FATAL,("syntax missing in %s",newname));
  2233. !                 return FALSE;
  2234. !             } else {
  2235.                   if (( ptr = index (sep,SEPERATOR)) != NULLCP) {
  2236.                       *ptr++ = 0;
  2237. !                     if (lexequ (ptr,"FILE") != 0) {
  2238.                           LLOG (log_dsap,LLOG_FATAL,("FILE syntax expected, '%s' found",ptr));
  2239. !                         return FALSE;
  2240. !                     } else {
  2241.                           attrOIDTable[attrNumEntries].oa_syntax = str2syntax(sep);
  2242.                           attrOIDTable[attrNumEntries].oa_syntax += AV_WRITE_FILE;
  2243.                           attrNumEntries++;
  2244. ***************
  2245. *** 301,307 ****
  2246.               else
  2247.                   ocNumEntries++;
  2248.       }
  2249. !     return;
  2250.   }
  2251.   
  2252.   char * get_oid (str)
  2253. --- 330,336 ----
  2254.               else
  2255.                   ocNumEntries++;
  2256.       }
  2257. !     return TRUE;
  2258.   }
  2259.   
  2260.   char * get_oid (str)
  2261.  
  2262. ORIGINAL REPORT:
  2263.      C Robbins
  2264. -------------------- Bug No 22 --------------------------
  2265. Return-Path: <c.robbins@uk.co.xtel>
  2266. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  2267.           id <16528-0@lancaster.xtel.co.uk>; Wed, 3 Apr 1991 16:23:58 +0100
  2268. To: quipu-bugs@xtel.co.uk
  2269. Subject: null attrs in RDNS
  2270. Date: Wed, 03 Apr 91 16:25:25 +0100
  2271. From: Colin Robbins <c.robbins@xtel.co.uk>
  2272.  
  2273. QUIPU VERSION:    6.8
  2274.  
  2275. ISODE VERSION:    6.8
  2276.  
  2277. MACHINE:    Sun 4/330 (X-TEL config)
  2278.  
  2279. O/S:        SunOS 4.1
  2280.  
  2281. PROGRAM:    various QUIPU
  2282.  
  2283. SYNOPSIS:    It is possible to create an RDN without a value in
  2284.         some circumstances.
  2285.  
  2286. DESCRIPTION:
  2287.         
  2288. REPEAT BY:
  2289.  
  2290. SAMPLE FIX:
  2291.  
  2292. *** dsap/common/_rdn_str.c    Wed Apr  3 16:05:52 1991
  2293. --- dsap/common/rdn_str.c    Wed Apr  3 16:08:00 1991
  2294. ***************
  2295. *** 37,42 ****
  2296. --- 37,48 ----
  2297.           return (NULLRDN);
  2298.       }
  2299.   
  2300. +     if (*ptr == 0) {
  2301. +         *save = val;
  2302. +         parse_error ("Attribute Value missing in RDN '%s'",str);
  2303. +         return (NULLRDN);
  2304. +     }
  2305.       rdn = rdn_comp_alloc();
  2306.       rdn->rdn_next = NULLRDN;
  2307.       rdn->rdn_at = at;
  2308.  
  2309. ORIGINAL REPORT:
  2310. -------------------- Bug No 23 --------------------------
  2311. Return-Path: <c.robbins@uk.co.xtel>
  2312. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  2313.           id <04224-0@lancaster.xtel.co.uk>; Fri, 19 Apr 1991 11:19:56 +0100
  2314. To: quipu-bugs@xtel.co.uk
  2315. Subject: modify -remove
  2316. Date: Fri, 19 Apr 91 11:16:48 +0100
  2317. From: Colin Robbins <c.robbins@xtel.co.uk>
  2318.  
  2319. QUIPU VERSION:    6.8
  2320.  
  2321. ISODE VERSION:    6.8
  2322.  
  2323. MACHINE:    Sun 4/330 (X-TEL config)
  2324.  
  2325. O/S:        SunOS 4.1
  2326.  
  2327. PROGRAM:    dish
  2328.  
  2329. SYNOPSIS:    problem removing attributes with the '-remove' flag
  2330.  
  2331. DESCRIPTION:    If there are multiple values for the attributes, a
  2332.         remove attempt sometimes failes.
  2333.  
  2334. REPEAT BY:
  2335.  
  2336. SAMPLE FIX:
  2337.  
  2338. *** quipu/dish/_modify.c    Fri Apr 19 11:15:04 1991
  2339. --- quipu/dish/modify.c    Fri Apr 19 10:44:50 1991
  2340. ***************
  2341. *** 214,220 ****
  2342.   
  2343.       if (start != 0)
  2344.       {
  2345. !             if (build_modify(start, &mod_arg) == NOTOK)
  2346.           {
  2347.               return ;
  2348.           }
  2349. --- 214,220 ----
  2350.   
  2351.       if (start != 0)
  2352.       {
  2353. !         if (build_modify(start, &mod_arg) == NOTOK)
  2354.           {
  2355.               return ;
  2356.           }
  2357. ***************
  2358. *** 698,709 ****
  2359.   struct    entrymod    *emnew ;
  2360.       AttributeType    a_t ;
  2361.       AttributeValue    new_AV ;
  2362. !     AV_Sequence    new_avs ;
  2363.       Attr_Sequence    eptr ;
  2364.   
  2365.       char   *ptr ;
  2366.       char   *str_attr_type = NULLCP ;
  2367.       char   *str_attr_val = NULLCP ;
  2368.   
  2369.       while (start)
  2370.       {
  2371. --- 698,711 ----
  2372.   struct    entrymod    *emnew ;
  2373.       AttributeType    a_t ;
  2374.       AttributeValue    new_AV ;
  2375. !     AV_Sequence    new_avs, tmp_avs ;
  2376.       Attr_Sequence    eptr ;
  2377.   
  2378.       char   *ptr ;
  2379.       char   *str_attr_type = NULLCP ;
  2380.       char   *str_attr_val = NULLCP ;
  2381. +     int    num_attr_vals = 0 ;
  2382. +     int    attr_val_match = 0 ;
  2383.   
  2384.       while (start)
  2385.       {
  2386. ***************
  2387. *** 773,789 ****
  2388.                   }
  2389.                   else
  2390.                   {
  2391. !                    if (eptr->attr_value && 
  2392. !                    AttrV_cmp(new_AV, &(eptr->attr_value->avseq_av)) == OK)
  2393. !                    {
  2394. !                       if (eptr->attr_value->avseq_next == NULLAV)
  2395. !                      emnew->em_type = EM_REMOVEATTRIBUTE ;
  2396. !                       else
  2397. !                      emnew->em_type = EM_REMOVEVALUES ;
  2398.                      }
  2399.                      else
  2400.                      {
  2401.                     ps_printf(OPT, "Can't remove value that is not present.\n") ;
  2402.                      }
  2403.                   }
  2404.                }
  2405. --- 775,800 ----
  2406.                   }
  2407.                   else
  2408.                   {
  2409. !                    num_attr_vals = 0 ;
  2410. !                    attr_val_match = 0 ;
  2411. !                    for (tmp_avs = eptr->attr_value; tmp_avs != NULLAV; 
  2412. !                     tmp_avs = tmp_avs->avseq_next)
  2413. !                    {                   
  2414. !                   if (AttrV_cmp(new_AV, &(tmp_avs->avseq_av)) == OK)
  2415. !                       {
  2416. !                      attr_val_match = 1 ;
  2417. !                   }
  2418. !                   num_attr_vals++ ;
  2419.                      }
  2420. +                    if (num_attr_vals == 1)
  2421. +                       emnew->em_type = EM_REMOVEATTRIBUTE ;
  2422.                      else
  2423. +                    emnew->em_type = EM_REMOVEVALUES ;
  2424. +                    if (attr_val_match == 0)
  2425.                      {
  2426.                     ps_printf(OPT, "Can't remove value that is not present.\n") ;
  2427. +                   return (NOTOK) ;
  2428.                      }
  2429.                   }
  2430.                }
  2431.  
  2432. ORIGINAL REPORT:     Mark Knopper to wpp-camayocs
  2433.  
  2434. -------------------- Bug No 24 --------------------------
  2435. Return-Path: <c.robbins@uk.co.xtel>
  2436. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  2437.           id <17685-0@lancaster.xtel.co.uk>; Wed, 1 May 1991 12:32:15 +0100
  2438. To: quipu-bugs@xtel.co.uk
  2439. Subject: Loading with EDB files missing
  2440. Date: Wed, 01 May 91 12:32:11 +0100
  2441. From: Colin Robbins <c.robbins@xtel.co.uk>
  2442.  
  2443. QUIPU VERSION:    6.8
  2444.  
  2445. ISODE VERSION:    6.8
  2446.  
  2447. MACHINE:    Sun 4/330 (X-TEL config)
  2448.  
  2449. O/S:        SunOS 4.1
  2450.  
  2451. PROGRAM:    ros.quipu
  2452.  
  2453. SYNOPSIS:    if an EDB file was missing, sometimes the DSA would
  2454.         incorrectly load the database, thinking it had MASTER
  2455.         control of the EDB file above!
  2456.  
  2457. DESCRIPTION:
  2458.  
  2459. REPEAT BY:
  2460.  
  2461. SAMPLE FIX:
  2462.  
  2463. *** quipu/_entry_load.c    Wed May  1 12:22:58 1991
  2464. --- quipu/entry_load.c    Wed May  1 12:24:13 1991
  2465. ***************
  2466. *** 360,368 ****
  2467.           if (file_check(offset, e) == OK) {
  2468.                   if ((e->e_children = getentry_block(e, filename)) == NULLAVL) {
  2469.               if (e->e_allchildrenpresent != FALSE &&
  2470. !                 e->e_leaf == FALSE)
  2471.                   return(OK);
  2472. !             else
  2473.                   return(NOTOK) ;
  2474.           }
  2475.           if (parse_status != 0)
  2476. --- 360,370 ----
  2477.           if (file_check(offset, e) == OK) {
  2478.                   if ((e->e_children = getentry_block(e, filename)) == NULLAVL) {
  2479.               if (e->e_allchildrenpresent != FALSE &&
  2480. !                 e->e_leaf == FALSE) {
  2481. !                 e->e_allchildrenpresent = FALSE;
  2482. !                 got_all = FALSE;
  2483.                   return(OK);
  2484. !             } else
  2485.                   return(NOTOK) ;
  2486.           }
  2487.           if (parse_status != 0)
  2488. *** quipu/_shadow.c    Wed May  1 10:58:16 1991
  2489. --- quipu/shadow.c    Wed May  1 10:59:39 1991
  2490. ***************
  2491. *** 415,423 ****
  2492.       }
  2493.   
  2494.   #ifdef TURBO_AVL
  2495. - #ifdef TURBO_INDEX
  2496. -                 turbo_index_delete(eptr);
  2497. - #endif
  2498.   
  2499.                   if (unravel_attribute(ne, &err) != OK) {
  2500.               pslog (log_dsap,LLOG_EXCEPTIONS,"shadow: unravel failure",
  2501. --- 415,420 ----
  2502. ***************
  2503. *** 441,446 ****
  2504. --- 438,447 ----
  2505.               return;
  2506.           }
  2507.   
  2508. + #ifdef TURBO_INDEX
  2509. +                 turbo_index_delete(eptr);
  2510. + #endif
  2511.                   if (ne->e_parent == NULLENTRY) {
  2512.                           entry_replace(database_root, ne);
  2513.                   } else {
  2514. ***************
  2515. *** 451,456 ****
  2516. --- 452,459 ----
  2517.           ne = eptr;
  2518.   
  2519.                   if (unravel_attribute(eptr, &err) != OK) {
  2520. +             pslog (log_dsap,LLOG_EXCEPTIONS,"shadow: 2nd unravel failure",
  2521. +                    dn_print, (caddr_t) dn);
  2522.               log_ds_error (&err);
  2523.               ds_error_free (&err);
  2524.               return;
  2525.  
  2526. ORIGINAL REPORT:
  2527.  
  2528.      Andrew Macpherson & Giant Tortoise!     
  2529. -------------------- Bug No 25 --------------------------
  2530. Return-Path: <c.robbins@uk.co.xtel>
  2531. Received: from spitfire by lancaster.xtel.co.uk with SMTP (PP) 
  2532.           id <00726-0@lancaster.xtel.co.uk>; Tue, 7 May 1991 11:50:25 +0100
  2533. To: quipu-bugs@xtel.co.uk
  2534. Subject: dsacontrol -refresh counting problem
  2535. Date: Tue, 07 May 91 11:50:13 +0100
  2536. From: Colin Robbins <c.robbins@xtel.co.uk>
  2537.  
  2538. QUIPU VERSION:    6.8
  2539.  
  2540. ISODE VERSION:    6.8
  2541.  
  2542. MACHINE:    Sun 4/330 (X-TEL config)
  2543.  
  2544. O/S:        SunOS 4.1
  2545.  
  2546. PROGRAM:    ros.quipu
  2547.  
  2548. SYNOPSIS:    Gets the DSA size count wrong if you use dsacontrol -refresh.
  2549.  
  2550. DESCRIPTION:    All entries ARE freed - the grow is to be expected.
  2551.  
  2552. REPEAT BY:
  2553.  
  2554. SAMPLE FIX:
  2555.  
  2556. *** quipu/_entry_load.c    Tue May  7 11:20:52 1991
  2557. --- quipu/entry_load.c    Tue May  7 11:44:22 1991
  2558. ***************
  2559. *** 702,707 ****
  2560. --- 702,765 ----
  2561.   #endif
  2562.   }
  2563.   
  2564. + static dsa_directory_free (directory)
  2565. + Entry directory;
  2566. + {
  2567. + extern Entry database_root;
  2568. + extern int local_slave_size;
  2569. + extern int slave_edbs;
  2570. + extern int local_master_size;
  2571. + extern int master_edbs;
  2572. + extern int local_cache_size;
  2573. +     if (directory !=  NULLENTRY) {
  2574. + #ifdef TURBO_AVL
  2575. +         if (directory != database_root)
  2576. +             turbo_index_delete(directory);
  2577. +         if (directory->e_children != NULLAVL) {
  2578. +             switch (directory->e_data) {
  2579. +                 case E_TYPE_SLAVE:     slave_edbs--;     break;
  2580. +                 case E_DATA_MASTER: master_edbs--;     break;
  2581. +                 default:                break;
  2582. +             }
  2583. +             (void) avl_free(directory->e_children, dsa_directory_free);
  2584. +         }
  2585. +         switch (directory->e_data) {
  2586. +             case E_TYPE_SLAVE:     local_slave_size--;     break;
  2587. +             case E_DATA_MASTER: local_master_size--;     break;
  2588. +             case E_TYPE_CACHE_FROM_MASTER: 
  2589. +                     local_cache_size--;     break;
  2590. +             default:                    break;
  2591. +         }
  2592. +         entry_free(directory);
  2593. + #else
  2594. + Entry ptr;
  2595. + Entry next;
  2596. +         switch (directory->e_data) {
  2597. +             case E_TYPE_SLAVE:     slave_edbs--;     break;
  2598. +             case E_DATA_MASTER: master_edbs--;     break;
  2599. +             default:                break;
  2600. +         }
  2601. +         for ( ptr = directory; ptr !=  NULLENTRY; ptr = next ) {
  2602. +             next = ptr->e_sibling;
  2603. +             dsa_directory_free (ptr->e_child);
  2604. +             switch (ptr->e_data) {
  2605. +                 case E_TYPE_SLAVE:     local_slave_size--;     break;
  2606. +                 case E_DATA_MASTER: local_master_size--;     break;
  2607. +                 case E_TYPE_CACHE_FROM_MASTER: 
  2608. +                         local_cache_size--;     break;
  2609. +                 default:                    break;
  2610. +             }
  2611. +             entry_free (ptr);
  2612. +         }
  2613. + #endif
  2614. +     }
  2615. + }
  2616.   int    refreshing;
  2617.   
  2618.   refresh_from_disk(dn)
  2619. ***************
  2620. *** 739,748 ****
  2621.   
  2622.       if (dn == NULLDN) {
  2623.           database_root = child;
  2624. !         directory_free (child);
  2625.           database_root = tmp;
  2626.       } else
  2627. !         directory_free(child);
  2628.   
  2629.       return (OK);
  2630.   }
  2631. --- 797,806 ----
  2632.   
  2633.       if (dn == NULLDN) {
  2634.           database_root = child;
  2635. !         dsa_directory_free (child);
  2636.           database_root = tmp;
  2637.       } else
  2638. !         dsa_directory_free(child);
  2639.   
  2640.       return (OK);
  2641.   }
  2642.  
  2643.  
  2644. ORIGINAL REPORT:
  2645.  
  2646. ------- Forwarded Message
  2647.  
  2648. Subject: Problems with DSA refresh
  2649. Reported-On: 06 May 91 15:13:00 -0500
  2650. Reported-By: Peter (P.W.) Whittaker <PWW@BNR.ca>
  2651. Reported-To: quipu-support@cs.ucl.ac.uk
  2652.  
  2653. Greetings, I'm concerned with the results of "dsacontrol -refresh"
  2654. operations, as initiated from dish.
  2655.  
  2656. After starting a 6.8 DSA on a Sun 4/490, "dsacontrol -info" showed
  2657. 10820 Master Entries in 20 EDB files, 753 Slave Entries in 13 EDB files,
  2658. while my process monitoring software showed DATA size at 3610 "clicks".
  2659. After two "dsacontrol -refresh" operations, these numbers had grown to
  2660. 27632 Master Entries in 45 EDBs, 767 Slave Entries in 15 EDBs, and
  2661. DATA == 6493 "clicks".  Total system swap usage rose from 34816 K to
  2662. 58520 K (QUIPU 6.8 was effectively the only process running).
  2663. ("clicks" is a Sun-ism - see sys/proc.h.  I don't know how it relates
  2664. to the real world).
  2665.  
  2666. It seems that QUIPU is not "forgetting" about the original entries
  2667. (i.e. the ones it is supposed to be refreshing).  Is there a quick-and-easy
  2668. way to patch this (I don't mind running a non-standard QUIPU - swap space
  2669. is at a premium).
  2670.  
  2671. I had observed the same behavior with 6.1, but decided to wait and see
  2672. how 6.8 behaved - it seems to behave the same way :-<.
  2673.  
  2674. Thanks for your help,
  2675.  
  2676. Peter W.
  2677.  
  2678. Peter Whittaker      [%%%%%%%%%%%%%%%%%%%%%%%%%%]   Open Systems Integration
  2679. pww@bnr.ca           [       DSA's'R'Us!        ]   Bell Northern Research
  2680. Ph: +1 613 765 2064  [                          ]   P.O. Box 3511, Station C
  2681. FAX:+1 613 763 3283  [__________________________]   Ottawa, Ontario, K1Y 4H7
  2682.  
  2683. ------- End of Forwarded Message
  2684.  
  2685.